filter的定义和用法
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
- 注意: filter() 不会对空数组进行检测。
- 注意: filter() 不会改变原始数组。
array.filter(function(currentValue,index,arr), thisValue)
- filter有两个参数,第一个参数是回调函数,第二个参数是回调函数的this指向
- 回调函数有三个参数,分别是当前值,当前值的下标,当前值所属数组对象
const obj = {name:'obj'}
const arr = [1, 2, 3];
let res = arr.filter( function(ele,index,arr){
console.log(ele,index,arr,this)
return ele > 2
}, obj)
console.log( '结果是',res);//[3]
自定义的filter
通过以上的运行结果,我们来实现自定义的myFilter 再来看下filter的语法
array.filter(function(currentValue,index,arr), thisValue)
如果想实现filter功能,那么有以下几个核心点:
- myFilter是一个函数,有两个参数,一个是回调函数,一个是回调函数的this指向(默认指向window)
- 实现了遍历
- 返回了一个满足回调函数的数组集合
Array.prototype.myFilter = function (cb, context = window) {
let self = this;
let len = self.length;
let result = []
for (let i = 0; i < len; i++) {
if (cb.call(context, self[i], i, this)) {
result.push(self[i])
}
}
return result;
}
测试一下
let myres = arr.myFilter(function (ele, index, arr) {
console.log(ele, index, arr, this,'-----myFilter')
return ele > 2
}, obj)
console.log('自定的filter结果', myres)// [3]