2012-05-10 9 views
5

Mam tablicę obiektów jak następuje w moim serwerze bocznej JS:JavaScript - Hrabia duplikaty ciągu tablicę obiektów

[ 
    { 
     "Company": "IBM" 
    }, 
    { 
     "Person": "ACORD LOMA" 
    }, 
    { 
     "Company": "IBM" 
    }, 
    { 
     "Company": "MSFT" 
    }, 
    { 
     "Place": "New York" 
    } 
] 

muszę iterację tej struktury, wykrywanie duplikatów, a następnie utworzyć rachubę duplikat znajduje się obok każdej wartości.

Obie wartości muszą być zgodne, aby kwalifikować się jako duplikat, np. "Firma": "IBM" nie pasuje do "Firmy": "MSFT".

Mam opcje zmiany tablicy danych obiektów w razie potrzeby. Chciałbym, aby wynik był obiektem, ale naprawdę staram się go uruchomić.

EDIT: Oto kod, który mam do tej pory, gdzie processArray jest tablicą, jak pokazano powyżej.

var returnObj = {}; 

    for(var x=0; x < processArray.length; x++){ 

     //Check if we already have the array item as a key in the return obj 
     returnObj[processArray[x]] = returnObj[processArray[x]] || processArray[x].toString(); 

     // Setup the count field 
     returnObj[processArray[x]].count = returnObj[processArray[x]].count || 1; 

     // Increment the count 
     returnObj[processArray[x]].count = returnObj[processArray[x]].count + 1; 

    } 
    console.log('====================' + JSON.stringify(returnObj)); 
+1

możliwy duplikat [Usuń duplikaty z tablicy obiektów w javascript] (http://stackoverflow.com/questions/2218999/remove-duplicates-from-an-array-of-objects-in-javascript) –

+0

** dlaczego ** powinien zrobić to ktoś inny? –

+0

@RoyiNamir: hahaha to nie ja :) – Sarfraz

Odpowiedz

22

Na przykład

counter = {} 

yourArray.forEach(function(obj) { 
    var key = JSON.stringify(obj) 
    counter[key] = (counter[key] || 0) + 1 
}) 

dokumentów: Array.forEach, JSON.stringify.

+0

Nie sądzę, że istnieje funkcja 'forEach' na tablicach. –

+7

@ ElliotBonneville: ale ty wierzysz w Google, prawda – georg

+0

Wow, nie mogę uwierzyć, że nigdy nie słyszałem o tej funkcji! Wiem, co robię zamiast 8 miliardów za pętle, teraz. Dzięki! –

1
Object.prototype.equals = function(o){ 
    for(var key in o) 
     if(o.hasOwnProperty(key) && this.hasOwnProperty(key)) 
      if(this[key] != o[key]) 
       return false; 
    return true; 
} 
var array = [/*initial array*/], 
    newArray = [], 
    ok = true; 
for(var i=0,l=array.length-1;i<l;i++) 
    for(var j=i;j<l+1;j++) 
    { 
     if(!array[i].equals(array[j])) 
      newArray.push(array[i]); 
    } 
Powiązane problemy