Как деструктурировать свойство объекта и свойства объекта.ES6 Javascript - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть объект

const complicatedObject = {
  propertyA: {
    property1: 1,
    property2: 2
  },
  propertyB: {
    property1: 1,
    property2: 2
  }
}

Если я хочу захватить propertyA Я делаю

const { propertyA } = complicatedObject 

console.log(propertyA) // { property1: 1, property2: 2}

Если я хочу получить propertyA's property1 значение, которое я делаю

const { propertyA: { property1 } } = complicatedObject

console.log(property1) // 1

Я могу взять propertyA и propertyA's property1 таким образом.

const { 
  propertyA, 
  propertyA: { 
    property1 
  } 
} = complicatedObject

console.log(propertyA) // { property1: 1, property2: 2}
console.log(property1) // 1

Есть ли более простой способ получить и propertyA, и property1?

Я прочитал следующее, но мне показалось, что ничего не выскочило мне как ответ.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Это правильный путь:

const { 
  propertyA, 
  propertyA: { 
    property1 
  } 
} = complicatedObject

Если вы хотите получить доступ как к propertyA, так и к property1 без использования множественного объявления.

console.log(propertyA) // { property1: 1, property2: 2}
console.log(property1) // 1

Но на вашем месте вы,Я бы сделал так:

const { propertyA } = complicatedObject
console.log(propertyA)
console.log(propertyA.property1)

Или, используя множественное объявление:

const { propertyA } = complicatedObject,
      { property1 } = propertyA
console.log(propertyA, property1)

На самом деле, цель вашего поста состоит в том, чтобы задать вопрос как:

const { propertyA: { property1 } } = complicatedObject
console.log(propertyA, property1)

И я бы сказал, это невозможно.Потому что конструирование объекта с двоеточием ведет себя как псевдоним свойства.Например,

const { propertyA: A } = complicatedObject
console.log(A) // works as if it is propertyA
console.log(propertyA) // won't work because propertyA is transformed to A

Аналогично,

const { propertyA: { property1 } } = complicatedObject

propertyA преобразуется в { property1 } и может быть доступен property1.

Также псевдонимдо property1,

const { propertyA: { property1: prop1 } } = complicatedObject
console.log(prop1)
0 голосов
/ 22 декабря 2018

Просто используйте два отдельных оператора деструктурирования, например, так:

const { propertyA } = complicatedObject; 
const { property1 } = propertyA;

Демонстрация:

const complicatedObject = {
  propertyA: {
    property1: 1,
    property2: 2
  },
  propertyB: {
    property1: 1,
    property2: 2
  }
}
const { propertyA } = complicatedObject;
const { property1 } = propertyA;

console.log(propertyA);
console.log(property1);

Однако, если вы хотите использовать максимально сжатый код и просто хотите получить значение property1 (1), вы можете использовать этот метод:

const { propertyA: { property1 } } = complicatedObject;

Демонстрация:

const complicatedObject = {
    propertyA: {
        property1: 1,
        property2: 2
    },
    propertyB: {
        property1: 1,
        property2: 2
    }
}
const { propertyA: { property1 } } = complicatedObject;
console.log(property1);

Надеюсь, это поможет!

...