2017-10-12 6 views
0

제목이 불쌍해서 죄송합니다.각 키의 속성을 제외하고 개체 복제

나는 달성하려는 일을하는 쉬운 방법을 생각할 수 없다. 는 기본적으로 나는 이런 종류의지도 역할을하는 큰 목적이 있습니다

나는 WebSocket을 통해이 개체의 일부를 보낼 필요가
{ 
    'room_id_1': {users:{}, property1: x, property2: y, property3: [...]}, 
    'room_id_2': {users:{}, property1: x, property2: y, property3: [...]}, 
} 

하지만, 아주 큰 얻을 수 있습니다 그리고 난 모든 데이터가 필요하지 않습니다 , 각 room_id에 대한 일부 속성. 위의 예제를 참조하면, 나는 매우 큰 배열 인 property2와 property3을 보낼 필요가 없다고 말합니다.

그럼 내 질문에, 같은 데이터 구조를 가진 객체를 만들 수있는 가장 좋은 방법은 무엇입니까? 각 키의 속성을 말하지 않고 (또는 다른 속성을 복제하고 유한하다고 말하지 않고)? 이다 :

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

또 다른 의미있다, 즉 문제가 있습니다 property2도 정의되지 않은 될 수 있습니다. 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