2017-10-12 49 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