javascript - 解构嵌套对象,但保留对嵌套对象的引用

标签 javascript destructuring

这个问题在这里已经有了答案:





object destructuring: how to use intermediate nested property

(1 个回答)


3年前关闭。




我有一个简单的用例,但我认为 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 (从技术上讲,未定义,它没有值(value))。

我知道我可以用类似的东西解决这个问题
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);

关于javascript - 解构嵌套对象,但保留对嵌套对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51506671/

相关文章:

c++ - 异常对象的最后一个潜在破坏点

javascript - for 循环和解构

javascript - jquery 移动设备方向更改不调整文本区域的大小

javascript - 单击按钮后添加新输入

javascript - 如何在 JavaScript 中创建包含多个空格的字符串

javascript - 如何在javascript中滚动到模式窗口的顶部

javascript - 如何解构包含函数的对象?

javascript - 当应用程序转到后台时删除 DOM 元素

javascript - es6 中对象的解构键、值和索引

javascript - 解构函数参数时如何处理 "null"和 "undefined"值