2013-03-29 50 views
0

關於從另一個數組創建新的唯一值數組的這篇文章(Remove Duplicates from JavaScript Array)。這段代碼如何從數組中刪除重複項

代碼中的問題:

uniqueArray = myArray.filter(function(elem, pos) { 
    return myArray.indexOf(elem) == pos; 
}) 

使用這個作爲測試數據:

var names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"]; 

期望的結果是,只有唯一值的數組:

var unique_names = ["Mike","Matt","Nancy","Adam","Jenny","Carl"]; 

在那裏我at:

I理解過濾器將在數組的每個成員上運行一個函數,並且elem是正在審查的元素,並且該pos是它的索引。如果某個東西導致該函數返回false,那麼該元素將不會包含在新數組中。因此,通過它,發生這種情況:

  1. myArray.indexOf(「Mike」)是否與0相同?是的,所以將「Mike」添加到新陣列中。
  2. myArray.indexOf(「Matt」)與1相同嗎?是的,所以添加「馬特」到新陣列。
  3. myArray.indexOf(「Nancy」)與2相同嗎?是的,所以將「Nancy」添加到新陣列中。

[重複所有元素。全部通過。]

基本上我不明白爲什麼第二南希會評估爲假。

+5

'indexOf'返回數組中第一個匹配元素的位置。當你處理第二個Nancy時,找到的位置與當前處理的索引不同,因此'false'。 –

+0

檢查我的答案在這裏http://stackoverflow.com/questions/13945965/zeptos-use-of-array-filter/13946124#13946124 – elclanrs

回答

1

indexof是第一個的索引,所以第二個Nancy會得到第一個Nancy的索引,並且會被過濾掉。

1

6)myArray.indexOf(「Nancy」)與5相同嗎?不(它是2,就像第3步),所以跳過重複的「Nancy」。

indexOf給你第一個發生該項目。