这个用于从数组中删除重复项的代码片段是如何工作的

How does this snippet for removing duplicates from an array work

本文关键字:片段 代码 工作 何工作 用于 数组 删除      更新时间:2023-09-26

关于从另一个数组中创建一个新的唯一值数组的帖子(从JavaScript数组中删除重复项)

问题代码:

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"];

Where I'm at:

我理解过滤器将对数组的每个成员运行一个函数,其中的elem是要检查的元素,而pos是它的索引。如果某些原因导致该函数返回false,则该元素将不包含在新数组中。浏览一下,会出现这样的情况:

  1. myArray.indexOf("Mike")是否等于0?是的,所以将"Mike"添加到新的数组中。
  2. myArray.indexOf("Matt")与1相同吗?是的,所以将"Matt"添加到新的数组中。
  3. myArray.indexOf("Nancy")是否与2相同?是的,所以将"Nancy"添加到新的数组中。

[对所有元素重复。所有通过。)

基本上我不明白为什么第二个南希会计算为false。

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

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

indexOf给出该项的第一个出现。