【发布时间】:2013-03-20 14:43:20
【问题描述】:
关于这篇关于从另一个数组创建唯一值的新数组的帖子 (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"];
我在哪里:
我知道 filter 将对数组的每个成员运行一个函数,并且 elem 是被审查的元素,而 pos 是它的索引。如果某些原因导致该函数返回 false,则该元素将不会包含在新数组中。因此,通过它,会发生这种情况:
- myArray.indexOf("Mike") 是否与 0 相同?是的,所以将“Mike”添加到新数组中。
- myArray.indexOf("Matt") 是否与 1 相同?是的,所以将“Matt”添加到新数组中。
- myArray.indexOf("Nancy") 是否与 2 相同?是的,所以将“Nancy”添加到新数组中。
[对所有元素重复。全部通过。]
基本上我不明白为什么第二个南希会评估为假。
【问题讨论】:
-
indexOf返回数组中第一个匹配元素的位置。当您处理第二个 Nancy 时,找到的位置与当前处理的索引不同,因此是false。
标签: javascript arrays