2016-06-27 4 views
1

몇 가지 공통 필드가있는 2 개의 Json 배열이 있습니다. 그러나 그들은 특정 순서로 정렬되지 않습니다. 나는 그들을 속성에 기반하여 병합 할 수 있기를 원합니다. 블라인드 병합일반적인 속성을 기반으로 2 개의 json 배열 객체를 병합합니다.

var merge = require('deepmerge'); 
var one = [{ 
    id:1 
}, 
{ 
    id:2 
}]; 
var two = [{ 
    id:2, 
    name:"test1" 
}, 
{ 
    id:1, 
    name:"test2" 
}]; 

console.log(merge(one,two)); 

deepmerge 결과, 다른 배열에서 첫 번째 요소를 첫 번째 요소.

[ { id: 2, name: 'test1' }, { id: 1, name: 'test2' } ]

나는이 일을 어떤 라이브러리가 있는지 궁금 ... 수동으로 하나 개의 배열을 통해 반복하는 다른 배열에서 일치하는 노드를 찾아 병합하기 위해 수를 알고있다. 생각?

+0

예 모두 가능하지만, 정확히 무엇을 원하는가? –

+0

@nina 2 개의 정렬되지 않은 배열이 있지만 위에서 언급 한 것과 같은 하나의 공통 속성을 갖고 있으며 병합하려고합니다. 그게 도움이 되니? – Sahas

+0

아니요, 더 많은 예제를 추가하십시오. 합병의 원한 결과. –

답변

0

당신은 기능을 사용할 수 있습니다 덮어 및 공통 키를되는 합병은 그룹이해야 정의합니다. 그것은 정렬되지 않은 데이터와 함께 작동합니다.

function merge(array, key) { 
 
    var r = [], 
 
     hash = Object.create(null); 
 

 
    array.forEach(function (a) { 
 
     a.forEach(function (o) { 
 
      if (!hash[o[key]]) { 
 
       hash[o[key]] = {}; 
 
       r.push(hash[o[key]]); 
 
      } 
 
      Object.keys(o).forEach(function (k) { 
 
       hash[o[key]][k] = o[k]; 
 
      }); 
 
     }); 
 
    }); 
 
    return r; 
 
} 
 

 
var one = [{ id: 1, score: 100 }, { id: 2, score: 200 }, { id: 4, score: 400 }], 
 
    two = [{ id: 2, name: "test1" }, { id: 1, name: "test2" }, { id: 3, name: "test3" }], 
 
    merged = merge([one, two], 'id'); 
 

 
console.log(merged);

+1

좋습니다, 감사합니다 ..... – Sahas

0

두 배열을 모두 손으로 정렬 하시겠습니까?

one.sort((a, b) => a.id - b.id); 
two.sort((a, b) => a.id - b.id); 

이제 배열이 정렬됩니다 제대로 병합 할 수 있어야한다 :

console.log(merge(one, two)); 
+0

thanks .. 나는 이것을 시도했다. 제 2의 배열과 일치하지 않는 배열의 배열 요소를 가지고있을 때 작동하지 않았다.다음은 예입니다. 정렬 된 배열 - [{id : 1}, {id : 2}, {id : 4}] 정렬 된 배열 - {012 : 1, 이름 : 'test2'}, (ID : 2, 이름 : 'test1'), {id : 3, 이름 : 'test3'}] [{ID : 1, 이름 : 'test2'}, { 'test1'}, {id : 3, 이름 : 'test3'}] – Sahas

+0

@Sahas 좋은 지적입니다! – andlrc

-1

난 당신이 lodash에서 merge를 찾고 있습니다 생각합니다. 후속 소스는 이전 소스의 등록 정보 지정을 겹쳐 9니다. 그래서이 후속 ID의

var users = { 
    'data': [{ 'user': 'barney' }, { 'user': 'fred' }] 
}; 

var ages = { 
    'data': [{ 'age': 36 }, { 'age': 40 }] 
}; 

_.merge(users, ages); 
// → { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } 
관련 문제