function bouncer(arr) {
return arr.filter(function(a){
return Boolean(a) !== false;
});
}我不知道为什么a不需要声明下是arr里的数据?
1 回答
已采纳
kevinZee
TA贡献50条经验 获得超39个赞
//首先将myFilter方法添加在数组的原型之上,达到和filter,sort等方法在任意数组实例上调用的效果 //这个callback就是你在调用myFilter这个方法的时候传进去的函数 Array.prototype.myFilter = function (callback) { //定义一个空数组用于返回结果数组 var array = []; //遍历当前的数组实例,也就是this for (var i = 0; i < this.length; i++) { //执行callback,将本次循环的数组的元素,当前元素的下标和数组实例本身作为参数传给callback //callback需要返回一个布尔值 if (callback(this[i],i,this)) { //当callback执行结果为真时,表明当前元素符合条件 //将当前的这个数组元素添加进结果数组 array.push(this[i]); } } //返回结果数组 return array; } //创建一个数组实例testArr var testArr = [1,2,3,4,5,6]; //调用myFilter方法,并传入一个函数 testArr.myFilter(function(a){ //这个函数的形参a其实就是数组的一项 //你可以看上面的myFilter的具体实现,因为myFilter调用后,会遍历调用myFilter的数组实例 //那么在每一次循环的过程中,都会将数组的当前一项作为参数传递给当前函数 //则此函数执行的结果是真是假,就会影响结果数组的元素 return a>3; })
因为这个a是这个回调函数的参数,上面我写了一个简单的myFilter方法实现了类似filter的功能
这个函数在执行循环的时候,会调用这个callback,并将当前的数组项传入
添加回答
举报
0/150
提交
取消