如何从数组中删除重复项的代码片段如何工作

时间:2013-03-29 20:35:50

标签: javascript arrays

关于从另一个数组创建新的唯一值数组的帖子(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"];

我在哪里:

我理解过滤器会在数组的每个成员上运行一个函数,而elem是被审查的元素,而pos是它的索引。如果某些东西导致该函数返回false,那么该元素将不会包含在新数组中。所以走过它,就会发生这种情况:

  1. myArray.indexOf(“Mike”)是否与0相同?是的,所以将“Mike”添加到新阵列中。
  2. myArray.indexOf(“Matt”)是否与1相同?是的,所以将“Matt”添加到新阵列。
  3. myArray.indexOf(“Nancy”)和2相同吗?是的,所以将“Nancy”添加到新阵列。
  4. [重复所有元素。全部通过。]

    基本上我不明白为什么第二个Nancy会评价为假。

2 个答案:

答案 0 :(得分:1)

indexof是元素第一个外观的索引,因此第二个Nancy将获得第一个Nancy的索引,并将被过滤掉。

答案 1 :(得分:1)

6)myArray.indexOf(“Nancy”)与5相同吗?不(它是2,就像第3步一样),所以跳过重复的“Nancy”。

indexOf为您提供第一次项目。