JS Array filter()方法
js的数据对象有一个fileter()方法,运行传入一个方法,并对数组中的每个元素进行过滤。
var arr = [1,2,3,4,5,6];
function checknum(num){
return num >= 5 ;
}
var narr = arr.filter(checknum); //结果:narr = [5,6]
1.语法
filter()的完整语法如下:
array.filter(function(currentValue,index,arr), thisValue)
- function(currentValue,index,arr): 过滤用的函数,每个元素都会执行这个函数(必)
- currentValue: 传入的值(必)
- index : 索引(选)
- arr: 当前调用filter()方法的数组对象(选)
- thisValue : 传递给过滤函数的this的值。
2.案例
2.1过滤小于35岁的数据
var age = [17,21,35,45,54,64];
function checkage(age){
return age >= 35 ;
}
var narr = age.filter(checknum); //结果:narr = [35,45,54,64]
2.2过滤arr中小于30的数,并且过滤不存在于arr2中的数
分析一下下面的案例,当arr调用filter()方法并传入一个过滤函数时,我也传入了一个arr2数组对象,而这个arr2数组对象将会赋值给过滤函数中的this。当执行filter中的过滤函数时,会将arr中每个元素当成参数传递给checknum(num),判断num十分大于30并包含在arr2数组中,返回的Boolean结果将决定了该元素是否被保留。True(保留) False(去掉)。
var arr = [14,20,36,54,67,88,96]
var arr2 = [14,54,88]
function checknum(num){
return num >= 30 && this.indexof(num)!=-1;
}
var narr = arr.filter(checknum,arr2); //结果:narr = [54,88]
2.3过滤掉arr中第三个元素的值
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。所以在过滤的过程中arr数组并没有发生改变。
var arr = [14,20,36,54,67,8,36,36,96,36]
//可以传入箭头函数
var narr = arr.filter((currentValue,index,arr)=>{
return currentValue ==arr[2];
});
2.4过滤掉arr中第三个元素的重复值
这里通过index获取当前元素在数组中索引,通过索引我们可以进行判断,从而避免删除第三个元素。(我们只是删除后面出现重复值)
var arr = [14,20,36,54,67,8,36,36,96,36]
//可以传入箭头函数
var narr = arr.filter((currentValue,index,arr)=>{
return currentValue ==arr[2] && index != 2;
});