2017-10-12 2 views
0

Sorry für den Titel, ich konnte nicht wirklich alles zusammenfassen.Clone ein Objekt mit Ausnahme bestimmter Eigenschaften für jeden Schlüssel

Ich kann mir keinen einfachen Weg vorstellen, was ich zu erreichen versuche. Grundsätzlich ich habe ein großes Objekt, das als eine Karte dieser Art dient:

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

Ich brauche Teile dieses Objekt über WebSockets zu schicken, aber es kann sehr groß werden, und ich alle seine Daten nicht mehr benötigen , nur einige Eigenschaften für jede room_id. In Bezug auf das obige Beispiel sage ich, dass ich property2 und property3 nicht senden muss, was ein sehr großes Array ist.

Also meine Frage ist, was ist der beste Weg, ich kann ein Objekt mit der gleichen Datenstruktur, nur ohne besagte Eigenschaften für jeden Schlüssel (oder klonen nur die anderen Eigenschaften, die ich weiß und endlich sind)? Das heißt:

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

Es ist nur eine andere Implikation, dass vielleicht Rolle: property2 auch undefiniert sein könnten. est Ich denke, es könnte eine elegante ES6-Lösung mit Destrukturierung Aufgaben geben, aber ich kann mir nicht selbst einfallen: Ich bin neu in der Syntax und ich kann einfach nicht sehen, wie ich es tun könnte.

+0

Können Sie nur die Eigenschaften, die Sie wollen, senden und das Objekt auf der anderen Seite bauen? –

+0

Eigentlich könnte das ziemlich gut funktionieren, danke! Wäre immer noch interessant, eine Lösung für das Problem zu sehen, in dem Fall, dass ich das nicht tun könnte. – YoDevil

+0

Warum würden Sie zusätzliche Daten über die Leitung senden, wenn Sie nicht müssten? – Maxwelll

Antwort

0

So können Sie es tun.

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

Verwandte Themen