数组filter方法
在编程中,数组的处理是非常常见的,而数组的filter方法又是一个重要的数组处理方法。本文将介绍filter方法,包括它的用法、特点、注意事项以及和其它操作方法的区别等。
一、filter方法介绍
1.1 filter方法概述
filter方法是一个ES5引入的数组处理方法,它可以根据提供的bool函数,对原数组进行过滤运算,返回过滤后的新数组,原数组的内容并不会发生变化。
例如:在一个数组 [1, 2, 3, 4] 中,根据筛选条件 x>2使用filter方法,可以返回筛选后的数组 [3, 4]。
1.2 filter方法实现原理
filter方法定义如下:array.filter(callback,[thisArg])。其中,callback是bool函数,它有三个参数:当前元素、当前元素的索引和数组本身。此外,thisArg参数可以指定filter方法中this
指向的对象。
使用filter方法时,它将会依次调用callback函数,检查每一个元素是否满足筛选条件,如果满足将元素放入新的数组中,最终返回新的数组。
二、filter方法的用法
2.1 filter的基本用法
如前所述,filter方法的参数是一个bool函数,根据此函数的返回值判断是否把当前元素放入新的数组中。该bool函数的返回值有四种可能:
1) true:如果返回true,则把当前元素放入新的数组中
2) false:如果返回false,则不会把当前元素放入新的数组中
3) 不返回或者返回undefined:忽略当前元素,不放入新的数组中
4) 不返回值但抛出错误:忽略当前元素,不放入新的数组中
例如:要在一个数组 [1, 2, 3, 4, 5] 中,筛选出大于3的数,则可以使用以下filter方法:
array.filter(function(x) { return x > 3; });
程序将会返回一个新的数组[4, 5]
2.2过thisArg使用filter方法
根据前文所述,filter方法有一个可选参数thisArg,可以用来指定在执行callback函数时,this指向的对象,如果不指定,那么this将会指向window。
例如:当前环境中有一个变量obj,变量obj的值为{ a: 1, b: 2},如果想使用filter方法筛选出,obj中值大于1的对象,则可以使用以下filter方法:
Object.keys(obj).filter(function(key) { return obj[key] > 1; },obj);
程序将会返回一个新的数组 [b
三、特点
3.1 filter方法的性能
filter方法的效率很高,原因有以下几点:
1) filter方法是就地操作,因此不会创建新的数组,也不会复制原数组中的元素;
2) filter方法使用一个回调函数,回调函数一次只处理一个元素;
3) filter方法会及时停止,当回调函数返回false时,filter方法将会停止;
以上三点使得filter方法在效率上比for和forEach要高一些。
3.2 filter方法返回值
filter方法返回的是一个新的数组,数组中的元素是根据bool函数返回结果而筛选出来的,因此,filter方法的返回值跟此次过滤的条件有关。
当callback函数返回true,元素放入新的数组中,如果callback函数返回false,则不放入新的数组中;如果callback函数没有返回值,则忽略该元素,不放入新的数组中。
四、注意事项
4.1 filter方法不会改变原数组
filter方法是就地操作,也就是说,它不会改变原数组,而是返回一个新数组,原数组不发生变化。
4.2 使用filter方法时,注意callback函数的返回值
如果用filter方法筛选数组中的元素时,要注意callback参数的返回值。如果返回的是true,则该元素将会放入新的数组中,如果返回的是false,则该元素将不会放入新的数组中。
五、filter方法与其它操作方法的区别
filter方法与其它操作方法是有一定区别的,下面列出了几个主要的区别:
1.filter方法返回的是一个新的数组,而其它操作方法(如forEach,map等)都是就地操作,不会返回新的数组。
2.filter方法只处理满足条件的元素,而其它操作方法(如map)会处理所有元素。
3.filter方法是有返回值的,而其它操作方法(如forEach)没有返回值。
六、结语
filter过滤对象数组 本文介绍了filter方法的用法、特点、注意事项以及它和其它操作方法的区别。作为一种数组处理方法,filter方法的使用范围非常广泛,在实际开发中应尽量多使用filter方法,以提高效率。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论