2014-10-23 2 views
0

두 개의 객체 배열을 비교하고 두 객체 간의 차이를 반환 한 다음 원래 데이터 세트에 추가하려고 lodash를 사용하려고합니다. 이유는 새 데이터에는 원본 데이터와 동일한 데이터가 포함됩니다. 예를 들어 에 3 개의 개체가 있고 newData을 요청하면 동일한 orgData과 하나 이상의 개체가 포함됩니다.lodash를 사용하여 배열에서 객체 비교 및 ​​제거

var orgData = [{ 
    "id": 1000, 
    "title": "First item" 
}, { 
    "id": 1001, 
    "title": "Second item" 
}]; 

var newData = [{ 
    "id": 1000, 
    "title": "First item" 
}, { 
    "id": 1001, 
    "title": "Second item" 
}, { 
    "id": 1002, 
    "title": "Third item" 
}]; 

내 유일한 구분 기호는 id이며 유일한 것입니다. 나는 다음을 시도했지만, 오류는 'id'undefined '속성을 읽을 수 없다. 별도의 데이터 구조 식별자의

_.filter(orgData, function(o, x) { 
    return o.id !== newData[x].id; 
}).forEach(function(x) { 
    orgData.push(x); 
}); 
+0

이 질문에 당신을 도울 수 있습니다 http://stackoverflow.com/questions/25764719/update-if-exists-or-add-new-element-to-array-of-objects-elegant-way-in-javascr – benhowdle89

+0

그럴 수도 있지만 그렇지 않습니다. newData의 길이가 orgData보다 크거나 짧을 때 도움이되지 않습니다. 배열에 객체를 추가하거나 배열에서 객체를 제거하는 방법을 어떻게 알 수 있습니까? – hybrid9

답변

2

보관할 트랙 :

var orgDataIds = []; 

_.each(orgData, function(value) { 
    orgDataIds.push(value.id); 
}) 

가 newData의 각 객체의 ID를 검사하고 대응하는 ID가 ID가 발견되지 않은 경우 orgData 대상물 추가 배열 :

_.each(newData, function(value) { 
    var id = value.id; 
    if (orgDataIds.indexOf(id) === -1) { 
     orgDataIds.push(id); 
     orgData.push(value); 
    } 
}) 

배열에서 개체를 제거하려고 할 때 분명하지 않습니다. 두 배열의 교차 부분을 차지하려고합니까?

0

VAR orgData = [{ "ID"1000 "제목": "첫 번째 항목" }, { "ID"1001 "제목": "번째 항목" }];

VAR newData의 = [{ "ID"1000 "제목": "첫 번째 항목" }, { "ID"1001 "제목": "번째 항목" }, { "id": 1002, "제목": "세 번째 항목" , { "id": 1003, "제목": "기타 항목" ]];

VAR newArray = _.union (orgData, newDate)

는이 두 배열의 조합을 반환 //

을 console.log (JSON.stringify (newArray))

관련 문제