2016-06-26 2 views
0

기준에 따라 객체를 객체로 분할하려고합니다. 이 같은 내가 얻을 경우 JSON 응답 : -객체를 여러 객체로 분할하고 자바 스크립트에서 배열로 푸시합니다 (아마도 밑줄/로다시 사용)

var obj = { dataSo : [{ key1 : "value1", key2 : "value.1.2", key3 : ["value1.3.1","value.1.3.2"]}, 
      { key1 : "value1", key2 : "value.2.2", key3 : ["value2.3.1","value2.3.2","value.2.3.3"]}, 
      { key1 : "value1", key2 : "value.3.2", key3 : ["value.3.3.1"]}, 
      { key1 : "value1", key2 : "value.4.2", key3 : []}]} 

그리고 내가 KEY3 하나 이상의 value.If는 KEY3을 유지하면서 다음 내가 전체 개체 것을 복사해야 하나 개 이상의 값을 포함 않습니다 가지고 있는지 확인해야 값을 다른 것으로 만들고 복사본을 만들어 새로운 객체로 배열에 넣습니다.

{ dataSo : [{ key1 : "value.1.1", key2 : "value.1.2", key3 : "value.1.3.1"}, 
      { key1 : "value.1.1", key2 : "value.1.2", key3 : "value.1.3.2"}, 
      { key1 : "value.2.1", key2 : "value.2.2", key3 : "value.2.3.1"}, 
      { key1 : "value.2.1", key2 : "value.2.2", key3 : "value.2.3.2"}, 
      { key1 : "value.2.1", key2 : "value.2.2", key3 : "value.2.3.3"}, 
      { key1 : "value.3.1", key2 : "value.3.2", key3 : "value.3.3.1"}, 
      { key1 : "value.4.1", key2 : "value.4.2", key3 : "" }]} 

어떻게이 효과적으로 달성 할 수 - :

은 예컨대 이전 데이터에서 들어 난 이런 일을해야합니까?

+0

"효과적으로"는 무엇을 의미합니까? 최고의 성능, 그렇다면 메모리 또는 시간 측면에서? 최단 코드? –

+0

시간면에서 코드가 적어 많은 루프를 피할 수 있습니다. – Neel

답변

1

map을 사용하여 각 요소를 각 값이 key3 인 하위 요소 배열로 분해합니다. 그런 다음 concat와 함께 그들을 다시 붙여 넣기 :이 솔루션은하지 배열, 그리고 key3이 비어있는 경우, 그것은 해당 요소를 생략합니다 key3 값을 처리하지 않습니다

obj.dataSo = [].concat(...obj.dataSo.map(({key1, key2, key3}) => 
    key3.map(key3 => ({key1, key2, key3})) 
); 

참고. 이 문제를 해결하기 위해, 전처리 key3 :

obj.dataSo = [].concat(...obj.dataSo.map(({key1, key2, key3}) => 
    (!Array.isArray(key3) ? [key3] : key3.length ? key3 : [""]) . 
    map(key3 => ({key1, key2, key3})) 
}); 

이 용액은 확산 연산자 destructuring로 ES6 기능을 사용하고, 문자 속기 개체.

+0

안녕하세요, 답변 주셔서 감사합니다. 그것은 아주 좋은 해결책입니다. 나는 {key1, key2, key3}이 무엇인지 알기를 원합니다. 그것은 나에게 객체처럼 보입니다. 하지만 키 값 쌍이 없으므로 ES6에 익숙하지 않은 이유는 무엇인지 모르겠습니다. 사실 나는 내 물건에 12 키를 가지고 있지만, 이것은 단지 3 키에만 열쇠를 쓴 것이기 때문에. 그래서 내가 비트를 동적으로 만들고 싶습니다. 즉이 키가 {key1, key2, key3}으로 바뀌므로 다양한 키를 사용할 수 있습니다. 감사합니다. – Neel