我有一个简单的用例,但我认为使用ES6语法是不可能的。我想使用对象分解来从嵌套对象中检索某些已知属性,但是我也想引用该嵌套对象,以便将其传递给可能关心其他属性的其他函数。
这是一个示例对象:
var record = {
name: "foo",
metadata: {
createdDate: "2017-02-19",
lastModifiedDate: "2018-07-24",
type: "bar"
}
};
在代码的特定位置,我想从元数据中提取一些值。同时,我还要提取整个元数据对象:
let {
metadata: {
createdDate
}
} = record;
if ( date( createdDate ).before( NEW_FEATURE_DATE ) ){
oldFeature( metadata );
} else {
newFeature( metadata );
}
不幸的是,我对metadata
属性的引用仅用于解构……它的值为undefined
(从技术上来说,它是未定义的,没有任何值)。
我知道我可以用类似的方法解决这个问题
let {
metadata: {
createdDate
}
} = record,
metadata = record.metadata;
或
let {
metadata
} = record,
{
createdDate
} = metadata;
...但是看起来有点笨拙,不是吗?是我缺少的东西,还是语法上的“空白”?
答案 0 :(得分:4)
您可以添加其他相同属性而无需进行破坏。
var record = { name: "foo", metadata: { createdDate: "2017-02-19", lastModifiedDate: "2018-07-24", type: "bar" } };
let { metadata: { createdDate }, metadata } = record;
// ^^^^^^^^ for nested destructuring
// ^^^^^^^^ for the value
console.log(metadata);
console.log(createdDate);
答案 1 :(得分:1)
这取决于您是否希望嵌套对象也包含经过分解的属性。
如果这样做,那么会看到Nina Scholz's answer
如果不这样做,则使用...rest
语法,如下所示:
let {
metadata: {
createdDate,
...metadataExceptForCreatedDate
}
} = record;