2009-02-06 4 views
0

Что бы хороший алгоритм, чтобы удалить дубликаты на массив как ниже ...Удаление дубликатов из 2d массива в JavaScript,

var allwords = [ 

    ['3-hidroxitiramina', '3-hidroxitiramina'], 

    ['3-hidroxitiramina', '3-hidroxitiramina'], 

    ['3-in-1 block', 'bloqueo 3 en 1'], 

    ['abacterial', 'abacteriano'], 

    ['abacteriano', 'abacteriano'], 

    ['abciximab', 'abciximab'], 

... 

Просто чтобы прояснить, я хотел бы один из

['3-hidroxitiramina', '3-hidroxitiramina'], 

Чтобы быть удалены, так что есть только один

+0

По к уже предоставленным ответам, это довольно непросто. Я предполагаю, что вы хотите удалить дубликаты в первом измерении, чтобы в массиве осталось только один «[3-hidroxitiramina», «3-hidroxitiramina»], верно? – Gumbo

ответ

0

[править]: неправильно истолковывать, после прочтения вашего разъяснения я хотел бы предложить:

var i = allwords.length-1, prev=''; 
do { 
    if (allwords[i].join('/') === prev) { 
     allwords.splice(i,1); 
    } 
    prev = allwords[i].join('/'); 
} while (i-- && i>-1); 

(реверсивный цикл является шагом оптимизации)

+0

Это похоже на трюк, спасибо :) – qui

0

вы можете использовать объект как ассоциативный массив/хэш (Если вы имеете в виду Dups в первом измерении)

var allWordsObj = {}; 
for(var i = 0; i < allWords.length; i++) { 
    allWordsObj[allWords[i][0]] = allWords[i][1]; 
} 

alert(allWordsObj['3-hidroxitiramina']); 
+0

Я не знаю, но спасибо – qui

0

Попробуйте это:

var len = allwords.length, i, j, first; 
for (i=0; i<len-1; i++) { 
    first = allwords[i].toString(); 
    for (j=i+1; j<len; j++) { 
     if (first === allwords[j].toString()) { 
      allwords.splice(j, 1); 
      len--; 
     } 
    } 
}