2017-10-12 2 views
0

タイトルのため申し訳ありません。各キーのプロパティを除くオブジェクトのクローン

私は達成しようとしていることを簡単に行う方法を考えることはできません。 は基本的に私はこの種のマップとして機能し、大きなオブジェクトがあります。

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

を私はWebSocketを介して、このオブジェクトの一部を送信する必要があるが、それは非常に大きな得ることができると私はすべてのデータを必要としません各room_idのプロパティがいくつかあります。上の例を参照すると、私は非常に大きな配列であるproperty2とproperty3を送信する必要はないと言っています。

私の質問は、私は同じデータ構造を持つオブジェクトを作成するための最良の方法は何ですか、ちょうど各キー(または私が知っていると有限である他のプロパティを複製する)のプロパティを言っていない? です:property2も未定義される可能性があります:問題かもしれない別の意味合いは、ちょうどあります

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

。 est Destructuring assignementsを使用したエレガントなES6ソリューションがあると思いますが、私は自分自身を思いつくことはできません。私は構文が新しく、どうすればいいのか分かりません。

+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

関連する問題