取消嵌套对象的结构,但保留对嵌套对象的引用



我有一个简单的用例,但我认为使用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;

但这似乎有点笨拙,不是吗?是我遗漏了什么,还是这只是语法上的"空白"?

您可以添加另一个相同的属性而不进行析构函数。

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

这取决于您是否希望嵌套对象也包含析构函数属性。

如果你这样做了,那么看看Nina Scholz的答案

如果你不这样做,那么使用...rest语法如下:

let {
metadata: {
createdDate,
...metadataExceptForCreatedDate
}
} = record;

最新更新