2014-09-30 3 views
3

내가 다음 JS 배열을 가지고 :제거 중복

var items=[ 
    { id: 1, name: 'aa' }, 
    { id: 1, name: 'bb' }, 
    { id: 2, name: 'cc' }, 
    { id: 1, name: 'dd' } 
]; 

나는 다음으로 변환 완.

var items=[ 
    { id: 1, name: 'dd' }, 
    { id: 2, name: 'cc' } 
]; 

JavaScript를 사용하여 어떻게해야합니까?

+0

http://stackoverflow.com/questions/23507853/remove-duplicate-objects-from-json-array –

답변

1

실제로이 작업을 매우 간단하게 반복 할 수 있습니다. 각 항목에 대해 ID에 해당하는 새 배열에서 해당 위치를 할당하십시오. 이전 ID는 덮어 쓰여 지므로 마지막 ID 만 저장됩니다.

var items=[ 
 
    { id: 1, name: 'aa' }, 
 
    { id: 1, name: 'bb' }, 
 
    { id: 2, name: 'cc' }, 
 
    { id: 1, name: 'dd' } 
 
], newItems = []; 
 
for (var i =0;i<items.length;i++){ 
 
    newItems[items[i].id - 1] = items[i]; 
 
} 
 
alert(JSON.stringify(newItems));

+0

ID가 인접하지 않은 경우 어떻게해야합니까? – Adam

+0

@Adam 그런 다음 몇 가지 빈 목록 항목이 있습니다. 그것들은 쉽게 걸러 낼 수 있습니다. – Scimonster

+0

@Scimonster - 훌륭한 솔루션이지만, 작동하지 않는 문자열 데이터의 기준에 따라 데이터를 필터링하려고 할 때 유용합니다. 이 경우 – prog1011

0

이 시도 : 이것은 당신이 원하는 일을해야

items = items.reverse().filter((function() { 
    var existing = {}; 
    return function(item) { 
     if(existing[item.id]) { 
      return false; 
     } 
     existing[item.id] = true; 
     return item; 
    } 
}())); 
+0

우리가 필터링 중이기 때문에, 그렇습니다.'filter'를 사용합시다 !! 그러나 내부는 약간 정리할 수 있습니다. 어쨌든'return! existing [item.id] && existing [item.id] = true;'? –

0

: 밑줄 사용

var items = [ 
    { id: 1, name: 'aa' }, 
    { id: 1, name: 'bb' }, 
    { id: 2, name: 'cc' }, 
    { id: 1, name: 'dd' } 
]; 

function removeDupIds(items){ 
    var result = [], 
     uniqIds = {}, 
     i  = 0, 
     l  = items.length; 

    for(; i<l; i++){ 
     uniqIds[items[i].id] = items[i].name; 
    } 

    for(var k in uniqIds){ 
     result.push({id: k, name: uniqIds[k]}); 
    } 
    return result; 
} 

console.log(removeDupIds(items)); 
0

, 그냥 것

_.uniq(items.reverse(), function(i1, i2) { return i1.id === i2.id; })) 

일반적으로 은 동일한 항목을 제거하지만 두 항목이 동일한 것으로 간주 될지 결정하는 데 사용할 함수를 지정하는 두 번째 매개 변수를 전달할 수 있습니다.

OP가 최종 항목 우선 순위를 원하기 때문에 items.reverse()이 필요합니다.