如何解构对象的属性和属性的属性。 ES6 Javascript

时间:2018-12-22 04:38:17

标签: javascript arrays object ecmascript-6 destructuring

我有一个对象

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

我可以这样抓取propertyApropertyA's property1

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

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

是否有一种更简单的方法来同时获得propertyAproperty1

我阅读了以下内容,但我觉得没有什么可以作为答案了。

谢谢!

2 个答案:

答案 0 :(得分:3)

只需使用两个单独的解构语句,如下所示:

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);

希望这会有所帮助!

答案 1 :(得分:2)

这是正确的方法:

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)