1.手写一个filter方法,命名为myFilter
// the global Array
var s = [23, 65, 98, 5];
Array.prototype.myFilter = function(callback){
var newArray = [];
// Add your code below this line
this.forEach(item=>{
if(callback(item)===true){ //直接调用callback判断结果是否为真。
newArray.push(item)
}
})
// Add your code above this line
return newArray;
};
var new_s = s.myFilter(function(item){
return item % 2 === 1;
});
2.用reduce方法 polyfill一个filter方法
reduce方法可以关联两个元素,而filter和map方法只能遍历元素,没法建立两个元素的关系,所以filter和map只是reduce的一种特例形式,通过reduce方法我们可以完全polyfill一个filter方法或者map方法;
var arr = [1,2,3]; //测试数据
//用reduce方法实现filter的功能
var result = arr.reduce((total,current)=>{
if(current>=2){
total.push(current);
}
return total;
},[]);
console.log(result);//[ 2, 3 ]
// 用reduce polyfill 一个filter
Array.prototype.myFilter = function(func){
return this.reduce((total, current)=>{
if(func(current)){
total.push(current)
}
console.log("total:", total);
return total;
}, []);
};
console.log("应该打印[2,3]");
console.log(arr.myFilter(item=>item>1));
3.用reduce polyfill 一个map方法
//用reduce方法实现map的功能
var mapResult = arr.reduce((total, current)=>{
total.push(current*current)
return total;
},[]);
console.log(mapResult); //[ 1, 4, 9 ]
Array.prototype.myMap = function(func){
return this.reduce((total, current)=>{
total.push(func(current));
return total;
},[]);
};
console.log("应该打印[1,4,9]");
4. 通过reduce的方法compose函数
function compose(funcs){
return funcs.reduce((a, b) => (...args) => a(b(...args)))
}