数组filter()参数详解,巧⽤filter()数组去重
数组⽅法挺多,但是⽤来⽤去可能也就foreach,splice以及slice接触较多,filter()说实话之前也没过多了解。其实filter()为数组提供过滤功能,它会遍历数组所有元素,并返回满⾜条件的元素组成的新数组,filter()不会修改原数组如下:
PS:filter接收2个参数,第⼀个参数为callback,第⼆个参数是callback运⾏时的this指向,⽽本⽂讲的三个参数是callback的三个参数。arr.filter(callback(ele,index,arr),this)
第⼀位形参
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var arr2 = arr.filter(function(x) {
return x >= 8;
});
console.log(arr2); //[8, 9, 10]
上述代码所做的事情,就是将arr中每个元素⼀次传⼊函数与8进⾏⽐较,得出8,9,10。第⼀个形参X就代表了数组中的元素。
第⼆位形参
让我们再来看看如下代码:
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var arr2 = arr.filter(function(x, index) {
return index % 3 === 0 || x >= 8;
});filter过滤对象数组
console.log(arr2); //[1, 4, 7, 8, 9, 10]
index代表数组索引,它的循环过程是这样的,⾸先传⼊元素1,它的索引为0,⽽0%3===0,满⾜了条件。
第⼆遍传⼊了2,索引为1,但1%3!==0,且1⽐8⼩,所以被排除,依次循环,得出我们arr2的输出
结果。
第三位形参
我们再来看⼀段代码,结合filter进⾏数组去重
var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7];
var arr2 = arr.filter(function(x, index,self) {
return self.indexOf(x)===index;
});
console.log(arr2); //[1, 2, 3, 4, 5, 6 ,7]
这是怎么实现的呢,filter的第三参数self代表数组本⾝,⽽indexOf始终返回第⼀次到匹配该元素的索引,我们来⾛⾛遍历过程。
第⼀次循环,传⼊元素1,index(1)的索引为0,⽽此时1的索引本来就是1,OK,满⾜。
第⼆次循环,传⼊元素2,index(2)的索引为1,⽽此时2的索引也是1,OK,也满⾜。
第三次循环,传⼊元素2,index(2)的索引为1,⽽此时2的索引为2,OK,不满⾜,被PASS,这⾥就是巧妙的借⽤了indexOf始终查到第⼀次出现的位置。
总结
filter(x,index,self)可以为数组提供过滤功能,其中x代表元素,index是与X⼀同传⼊元素的索引,⽽self代表数组本⾝。
就这么多吧。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论