如何手写一个数组的filter筛选器的方法?
首先看看filter这个API都有什么参数
可以看到有两个参数:“回调函数” 和 “this”;
回调函数中有三个参数:1.当前值;2.索引值;3.使用该方法的数组。
Array.prototype.myFilter = function(fn,thisValue){
if(Object.prototype.toString.call(fn) !== "[object Function]"){ //判断传入的参数fn是否为函数
throw new Error("fn is not a function")
}
let result = [] //用来存放符合筛选条件的元素
let curArray = this //代表调用该方法的数组
for(var i = 0;i < curArray.length;i++){
//通过call方法将fn的this绑定到thisValue上,
//再把函数所需要的参数依次传入,
//如果回调函数执行的结果为true,则进入if判断,将符合条件的元素添加至result中
if(fn.call(thisValue,curArray[i],i,curArray) ){
result.push(curArray[i])
}
}
return result //遍历完毕,返回result
}