2017-11-05 10 views
0

각 객체에 배열이 들어있는 객체 배열이 있습니다. 내부 배열의 요소가 다른 경우에는 추가되거나 단일 요소로 유지되도록 조작해야합니다. ; 기본적으로 type으로 그룹화됩니다. 설명하기가 좀 힘들어. 그래서 내가 너에게 모범을 보였다.키 JavaScript에 의해 두 개의 객체를 병합 (다른 값을 무시하지 않고)

let array1 = [{ 
     1: [{ 
     id: "aaaa", 
     name: 'name1', 
     type: 1 
     }], 
     2: [{ 
     id: 'bbbb', 
     name: 'name2', 
     type: 2 
     }], 
     3: [{ 
     id: "ccc", 
     name: 'name3', 
     type: 3 
     }] 
    }, 
    {1: [{ 
     id: "aaaa", 
     name: 'name1', 
     type: 1 
     }], 
     2: [{ 
     id: 'bbbb', 
     name: 'name2', 
     type: 2 
     }], 
     3: [{ 
     id: "dddd", 
     name: 'name4', 
     type: 3 
     }], 
    }; 

그리고 난 다음 개체 같은 좀하고 싶습니다 : 여기 배열 나는이되어

 let result = { 
     1: [ 
     { 
      id: "aaaa", 
      name: 'name1', 
      type: 1 
     }], 
     2: [{ 
      id: 'bbbb', 
      name: 'name2', 
      type: 2 
     }], 
     3: [{ 
      id: "cccc", 
      name: 'name3', 
      type: 3 
     }, 
     { 
      id: "dddd", 
      name: 'name4', 
      type: 3 
     } 
     ] 
    } 

무엇 (아마도 lodash 사용)이 작업을 수행하는 가장 효율적인 방법이 될 것입니까? 나는 foreach로 무언가를 시도하고 할당했지만 alwaays 결국 내부 배열을 무시 결국 ... 도움을 주셔서 감사합니다!

답변

1

당신은 비교 함수를 전달하는 _.mergeWith를 사용할 수 있습니다

var result = array1.shift(); 
_.mergeWith(result, ...array1, function(a, b) { 
    return _.isEqual(a, b) ? a : _.concat(a, b); 
}); 
console.log(result); 

demo fiddle

+0

와우, 그것은 아름답게 작동합니다. 아주 똑똑. 고맙습니다!! – mikey