克隆除每个键

时间:2017-10-12 22:35:50

标签: javascript-objects destructuring

对不起标题,我无法真正总结。

我无法想到一种简单的方法来做我想要实现的目标。 基本上我有一个大物体作为这种地图:

{
    'room_id_1': {users:{}, property1: x, property2: y, property3: [...]},
    'room_id_2': {users:{}, property1: x, property2: y, property3: [...]},
}

我需要通过WebSockets发送此对象的一部分,但它可能会变得非常大,我不需要它的所有数据,只需要每个room_id的一些属性。参考上面的例子,假设我不需要发送property2和property3,这是一个非常大的数组。

所以我的问题是,我可以创建具有相同数据结构的对象的最佳方法是什么,只是没有每个键的所述属性(或者只是克隆其他属性,我知道并且是有限的)? 那就是:

{
    'room_id_1': {users:{}, property1: x},
    'room_id_2': {users:{}, property1: x},
}

这只是另一个含义,这可能很重要:property2也可能是未定义的。 美东时间 我认为可能有一个优雅的ES6解决方案使用Destructuring assignements,但我不能自己想出一个:我对语法不熟悉,我只是看不出自己能做到这一点。

1 个答案:

答案 0 :(得分:0)

这就是你可以做到的。

var bigObject = {
        'room_id_1': {users:{}, property1: 3, property2: 5, property3: [1, 2, 3, 4]},
        'room_id_2': {users:{}, property1: 6, property2: 9, property3: [1, 2, 3, 4]}
};

Object.keys(bigObject)
    .reduce((prev, propKey) => {
        let newObj = {};
        ['users', 'property1'].forEach(eachKey => {
                newObj[eachKey] = bigObject[propKey][eachKey];
        });
        prev[propKey] = newObj;
        return prev;
    }, {});

enter image description here