数组filter()参数详解,巧用filter()数组去重
数组 详解 参数 filter 巧用
2023-09-11 14:16:38 时间
数组方法挺多,但是用来用去可能也就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; }); 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的索引本来就是0,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代表数组本身。
就这么多吧。
相关文章
- PHP 数组转字符串,与字符串转数组
- LeetCode(81): 搜索旋转排序数组 II
- java 从InputStream 获取字节数组
- 对已有的2个一维数组,譬如说A[],B[],经过最少循环找出2个数组重复的元素。
- go基础语法:数组定义
- Scala 数组详解
- 力扣——26. 删除有序数组中的重复项(Java、C、python3实现)
- 【华为机试真题详解】数组的中心位置【2022 Q4 | 100分】
- 有序数组循环移位后找到最小(大)数(移了几位不考虑循环次数)
- (十九)数组的内存分配
- LabVIEW 点击数组元素返回索引值的方法与例程
- js中数组对象去重的方法
- C语言逆向——指针,函数指针,数组指针是比较难理解的,结构体指针要体会其编译器生成汇编代码的本质
- cassandra 存储list数组