ES5-Array-filter
2019-06-10 本文已影响0人
chrisghb
filter
方法用于过滤数组成员,满足条件的成员组成一个新数组返回(新数组长度可能会变)。用法跟map
极为相似(map新数组长度不会变)。
-
filter
也要有return
。
语法
var new_array = arr.filter(callback, thisArg)
它的第一个参数是一个函数,所有数组成员依次执行该函数,返回结果为true
的成员组成一个新数组返回。
- 注意:该方法不会改变原数组。也不会对空数组进行检测。
[1, 2, 3, 4, 5].filter(function (elem) {
return (elem > 3);
})
// [4, 5]
上面代码将大于3的数组成员,作为一个新数组返回。
var arr = [0, 1, 'a', false];
arr.filter(Boolean)
// [1, "a"]
上面代码中,filter方法返回数组arr里面所有布尔值为true的成员。
- 注意:返回值只要是弱等于== true/false就可以了,而非返回 === true/false
filter方法的参数函数可以接受三个参数:当前成员,当前位置和整个数组。
[1, 2, 3, 4, 5].filter(function (elem, index, arr) {
return index % 2 === 0;
});
// [1, 3, 5]
上面代码返回偶数位置的成员组成的新数组。
filter方法还可以接受第二个参数,用来绑定参数函数内部的this变量。
var obj = { MAX: 3 };
var myFilter = function (item) {
if (item > this.MAX) return true;
};
var arr = [2, 8, 3, 4, 1, 3, 2, 9];
arr.filter(myFilter, obj) // [8, 4, 9]
上面代码中,过滤器myFilter内部有this变量,它可以被filter方法的第二个参数obj绑定,返回大于3的成员。
- 如果为 filter 提供一个 thisArg 参数,则它会被作为 callback 被调用时的 this 值。否则,callback 的 this 值在非严格模式下将是全局对象,严格模式下为 undefined。
如果数组有<font color=red size=4>空位</font>,map方法的回调函数在这个位置不会执行,会跳过数组的空位。
[1, , 3, 4, 5].filter(function (elem) {
return (elem < 3);
})
//[1]