我具有以下功能,该功能几乎可以实现预期的功能,但是我想确切地了解它在循环的每个步骤中的功能。
您能否看一下下面的函数,并给我一个清晰的解释,注释每个步骤或Filter和IndexOf方法?
提前非常感谢您。
var arr = [6,2,6,8,9,9,9,4,5];
var unique = function(){
return arr.filter(function(e, i, a) {
return i === a.indexOf(e);
})
}
unique();
最佳答案
indexOf
返回数组中元素的first索引:
[1,2,2,3].indexOf(2); // 1
因此,如果在示例中使用
filter
到元素的第二次出现,则索引(示例中的i
)将不等于indexOf
返回的值并被删除。在我的数组中,第二个2上方的位置2显然不严格等于indexOf
返回的位置2。[1,2,2,3].filter((value, index, array) => array.indexOf(value) === index);
// first iteration: value is 1, index is 0, indexOf is 0 0===0 keep 1
// second: value is 2, index is 1, indexOf is 1, 1===1 keep 2
// third: value is 2, index is 2, indexOf is 1, 1===2 false! toss 2
// etc.
最终结果是,所有重复元素将从
filter
返回的副本中删除。并且它是一个副本,原始数组未突变。编辑
我可能应该提到,JavaScript的最新版本为我们提供了更好的方法:
let arrayWithDupes = [1,2,2,3];
let uniq = Array.from(new Set(arrayWithDupes)); // [1,2,3]
关于javascript - 谁能解释在一个函数中Filter和IndexOf方法如何一起工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45238972/