javascript - 解构嵌套对象,但保留对嵌套对象的引用
问题描述
我有一个简单的用例,但我认为 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);
推荐阅读
- javascript - 我应该为多个任务创建多个网络工作者还是只需要 1 个网络工作者就足够了?
- firebase - 没有身份验证的 Firestore 安全规则
- database - 我无法在我的颤振应用程序中从 firebase 数据库中检索数据。我不知道我的代码有什么问题
- ssl - 谷歌云上的 KAFKA 负载均衡器在 SSL 端口上出错
- dart - 无法完成程序
- shell - Linux Shell 中 if 语句中的 in 子句
- eslint - 如果我有很多 eslint 错误,我想在运行 yarn start 时抛出错误
- javascript - 带有 Docker 的 Nuxt js:找不到模块:错误:无法解析
- nlp - 如何为 T5 模型使用 forward() 方法而不是 model.generate()
- javascript - 如何使用 jquery 获取 textarea 上每一行的值?