var data1 = [{'id': '1', 'val': 'test'}, {'id': '2', 'val': 'test'}, {'id': '3', 'val': 'test'}]; var data2 = [{'id': '1', 'val': 'test'}, {'id': '2', 'val': 'test'}, {'id': '4', 'val': 'test'}];
data1 배열 과 data2 배열을 비교하여
특정한 키 (여기서는 id) 의 값 (여기서는 1,2,3,4)을 참고하여
data1에 있으나 data2에 없는 {'id': '3', 'val': 'test'} 만 남도록
data2에 있으나 data1에 없는 {'id': '4', 'val': 'test'} 만 남도록 처리 하려면 어떻게 하면 될까요?
(예시를 위한 결과이며 위 중복체크 과정에서는 val 키와 값은 전혀 무관, 오롯이 id키의 값만 기준)
아래는 기존의 소스 입니다. (키없이 값만 존재하는 배열에서는 작동 됨)
var data1 = new Array("1","2","3"); var data2 = new Array("1","2","4"); var result1 = data1.filter(function(val) { return data2.indexOf(val) == -1; }); console.log(result1); // 3 출력 var result2 = data2.filter(function(val) { return data1.indexOf(val) == -1; }); console.log(result2); // 4 출력
위와 같이 작동되도록
특정한 키의 값이 동일한지 여부를 체크하고 중복안되는 대상만을 남기는 방법은 무엇일까요?
고수분 도와주세요! ㅠㅠ
for(var key in data2) {
if(val.id == data2[key].id) return false;
}
return true;
});
해당하는 요소(val)의 id를 가지는 요소가 data2 요소들 중에 존재하는지 체크후 존재하면 false를, 존재하지 않으면 true를 반환하면 됩니다. 반대로 하신다면 data2.filter에 for문에서 비교하는건 data1을 하시면 되겠죠.