分解嵌套对象,但保留对嵌套对象的引用 [英] Destructure a nested object, but keep a reference to the nested object

查看:40
本文介绍了分解嵌套对象,但保留对嵌套对象的引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的用例,但我认为使用ES6语法是不可能的.我想使用对象分解来从嵌套对象中检索某些已知属性,但是我也想引用该嵌套对象,以便将其传递给可能关心其他属性的其他函数.

这是一个示例对象:

  var record = {名称:"foo",元数据:{createdDate:"2017-02-19",lastModifiedDate:"2018-07-24",类型:栏"}}; 

在代码的特定位置,我想从元数据中提取一些值.同时,我还要提取整个元数据对象:

  let {元数据:{创建日期}} =记录;如果(date(createdDate).before(NEW_FEATURE_DATE)){oldFeature(元数据);} 别的 {newFeature(元数据);} 

不幸的是,我对 metadata 属性的引用仅用于解构……它的值是 undefined (从技术上讲,是未定义的,它没有值)./p>

我知道我可以用类似的方法解决这个问题

  let {元数据:{创建日期}} =记录,元数据= record.metadata; 

  let {元数据} =记录,{创建日期} =元数据; 

...但是看起来有点笨拙,不是吗?是我缺少的东西,还是语法上的空白"?

解决方案

您可以添加其他相同属性而无需进行结构分解.

  var record = {名称:"foo",元数据:{createdDate:"2017-02-19",lastModifiedDate:"2018-07-24,键入:" bar}};让{元数据:{createdDate},元数据} =记录;//嵌套解构的^^^^^^^^^//值的^^^^^^^^^console.log(元数据);console.log(createdDate);  

I have a simple use-case, but I think it's not possible with ES6 syntax. I'd like to use object destructuring to retrieve certain known properties from a nested object, but I'd also like a reference to that nested object so that I can pass it along to other functions which may care about other properties.

Here's an example object:

var record = {
    name: "foo",
    metadata: {
        createdDate: "2017-02-19",
        lastModifiedDate: "2018-07-24",
        type: "bar"
    }
};

At a certain point in my code, I'd like to extract some values from the metadata. At the same time, I'd also like to extract the entire metadata object:

let {
    metadata: {
        createdDate
    }
} = record;

if ( date( createdDate ).before( NEW_FEATURE_DATE ) ){
    oldFeature( metadata );
} else {
    newFeature( metadata );
}

Unfortunately, my reference to the metadata property is used purely for destructuring... it's value is undefined (technically, being undefined, it has no value).

I know I can solve this with something like

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

or

let {
        metadata
    } = record,
    {
        createdDate
    } = metadata;

... but that seems kind of clumsy, doesn't it? Is there something I'm missing, or is this just a "gap" in the syntax?

解决方案

You could just add another same property without destructuring.

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

这篇关于分解嵌套对象,但保留对嵌套对象的引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆