2017-10-12 47 views
0

对不起,对于标题,我无法真正总结一切。克隆除每个键的给定属性以外的对象

我想不出一个简单的方法来做我想要达到的目标。 基本上我有一个很大的对象,作为地图这样的:

{ 
    '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也可能是不确定的。 est 我认为可能会有一个优雅的ES6解决方案使用Destructuring assignements,但我无法自己想出一个:我是新手,我只是看不到我能做到这一点。

+0

可你只是给你想要的属性,构建在另一边的对象? –

+0

其实,这可能工作得很好,谢谢! 虽然我不能这样做,但在问题的解决方案中仍然会很有趣。 – YoDevil

+0

如果你不需要,为什么你会通过电线发送额外的数据? – Maxwelll

回答

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