0

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

我在哪里:

我知道过滤器将在数组的每个成员上运行一个函数,而 elem 是被审查的元素,而 pos 是它的索引。如果某些原因导致该函数返回 false,则该元素将不会包含在新数组中。因此,通过它,会发生这种情况:

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

[对所有元素重复。全部通过。]

基本上我不明白为什么第二个南希会评估为假。

4

2 回答 2

1

indexof 是元素第一次出现的索引,所以第二个 Nancy 会得到第一个 Nancy 的索引,会被过滤掉。

于 2013-03-29T20:40:57.823 回答
1

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

indexOf为您提供该项目的第一次出现。

于 2013-03-29T20:41:47.367 回答