ES5 数组filter()方法
定义和用法
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测。
注意: filter() 不会改变原始数组。
array.filter(function(currentValue,index,arr), thisValue)
thisValue是参数函数的this指向,如果不传则是参数函数的this是undefined。
let arr = [1,45,77,5];
let b = arr.filter(function(curItem,curIndex,_arr){
console.log(curItem,curIndex,_arr,this);
return curItem>10;
},window)
console.log('b:',b);
上面的代码,执行结果和预期的一样,this指向了window对象,b=[45,77]
下面用自己的方法实现filter()方法:
function myFilter(fn,_this){
let r = [];
if(typeof fn === "function") {
let arr = this;
for (let i =0; i <arr.length; i++) {
if (fn.call(_this,arr[i],i,arr)) {
r.push(arr[i]);
}
}
}
return r;
}
Array.prototype.myFilter = myFilter;
let c = arr.myFilter(function(curItem,curIndex,_arr){
console.log(curItem,curIndex,_arr,this);
return curItem>10;
},window);
console.log('c:',c);