Как мне деконструировать этот объект объектов объектов в объект объектов?

#javascript #object

Вопрос:

У меня есть, скажем так, этот объект

 const obj = {
  background: {
   backgroundColor:{
    background: '#ffffff'
   },
   backgroundImage:{
    background: 'url(...)'
   }
  },
 header:{
  logo:{
   width: '100%'
  },
  title:{
   color: '#000000'
  }
 }
}
 

И мне нужно разобрать его на что-то вроде этого:

 const deconstructedObj = {
   backgroundColor:{
    background: '#ffffff'
   },
   backgroundImage:{
    background: 'url(...)'
   },
   logo:{
    width: '100%'
  },
   title:{
    color: '#000000'
  }
}
 

Это всего лишь пример, мои объекты больше, но идея та же, первые ключи нужно разобрать, как мне это сделать?

Комментарии:

1. Может быть, как на это посмотреть, нужно удалить первые ключи

Ответ №1:

Это приведет вас туда, так как вам нужны только значения внешних объектов. Object.values соберет эти внутренние объекты в повторяющийся массив, а array.reduce() поможет объединить их все в один результат объекта

 Object.values(obj).reduce( (b,a) => ({...b, ...a}),{})
 
 const obj = {
  background: {
    backgroundColor: {
      background: '#ffffff'
    },
    backgroundImage: {
      background: 'url(...)'
    }
  },
  header: {
    logo: {
      width: '100%'
    },
    title: {
      color: '#000000'
    }
  }
}
const decon = Object.values(obj).reduce( (b,a) => ({...b, ...a}),{})
console.log(decon) 

Ответ №2:

Если вам нужны только определенные ключи или необходимые ключи вложены на разных уровнях, вы можете попробовать что-то вроде этого:

 const obj = {
  background: {
   backgroundColor:{
    background: '#ffffff'
   },
   backgroundImage:{
    background: 'url(...)'
   }
  },
 header:{
  logo:{
   width: '100%'
  },
  title:{
   color: '#000000'
  }
 }
}


const { background: { backgroundColor, backgroundImage }, header: { logo, title } } = obj;

const destructuredObj = {
  backgroundColor,
  backgroundImage,
  logo,
  title
}

console.log(destructuredObj)