2017-04-23 6 views
0

두 배열을 lodash과 결합하려고하지만 캐치가 있습니다. 항목의 ID가 같으면 2 번째 배열에서 항목을 선택하십시오. 예 :id가 같으면 자바 스크립트에서 두 배열을 결합하고, 두 번째 배열에서 하나를 선택하십시오.

let arr1 = [{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3'}]; 
let arr2 = [{ id: 3, name: 'name3', score: 1}]; 

예상 결과는

[{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3', score: 1}]; 

어떤 생각, 그것을 어떻게 달성했다. 나 한테 아이디어 좀 쏴봐. 미리 감사드립니다.

+0

당신이 차이를 알고 얼마나 질문에'javascript'을 감안할 때? '점수 '속성? 질문을 해결하려고 무엇을 시도 했습니까? – guest271314

+0

@ guest271314 두 번째 배열에는 각 개체에 필드가 하나 더 있어야하는 단 하나의 차이점이 있습니다. 만약 내가 함께 가입하고 각 배열의 객체 ID가 같으면 점수 필드가있는 객체를 가져 가고 싶습니다. – thestrayed

+0

'var res = Object.assign ([], arr1, arr2)' – guest271314

답변

1

일반 자바 스크립트에서는 Map을 사용하고 두 번째 배열 항목이 있는지 확인한 다음 두 번째 배열 항목을 첫 번째 배열에서 두 번째 배열 항목으로 가져옵니다. 해시 테이블과 같은 개체 ES5

let array1 = [{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3'}], 
 
    array2 = [{ id: 3, name: 'name3', score: 1}], 
 
    map2 = new Map(array2.map(a => [a.id, a])), 
 
    result = array1.map(a => map2.get(a.id) || a); 
 
    
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

.

var array1 = [{ id: 1, name: 'name1'}, { id: 2, name: 'name2'}, { id: 3, name: 'name3'}], 
 
    array2 = [{ id: 3, name: 'name3', score: 1}], 
 
    map2 = array2.reduce(function (r, a) { 
 
     r[a.id] = a; 
 
     return r; 
 
    }, Object.create(null)), 
 
    result = array1.map(function (a) { 
 
     return map2[a.id] || a; 
 
    }); 
 
    
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

어쩌면 ES5 버전이 작동 할 수도 있습니다. –

+0

나는 그것을 얻었다, 나는 정중하게 대답을 읽지 않았다. 고맙습니다 – thestrayed