2013-03-29 52 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给你第一个发生该项目。