2009-02-06 41 views
0

去除二維數組重複這將是一個很好的算法,除去像下面的陣列上愚弄......在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 2009-02-06 11:36:31

回答

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 2009-02-06 11:56:55

0

你可以使用一個對象作爲關聯數組/哈希(如果你的意思是在第一維的DUP)

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

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

我沒有,但由於 – qui 2009-02-06 11:23:55

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--; 
     } 
    } 
}