2022-09-14【手动实现filter】

210 阅读1分钟

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]