map方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素
注意: map() 不会对空数组进行检测。
注意: map() 不会改变原始数组。
用法为:array.map(function(currentValue,index,arr), thisValue)
实现:
Array.prototype.selfMap = function(fn,thisArg){
let result=[];
console.log(this)
for(let i=0;i<this.length;i++){
result.push(fn.call(thisArg,this[i],i))
}
return result;
}
console.log([1,2,3,4].selfMap((item,i)=>{
return ++item;
}))//[2,3,4,5]
或reduce实现:
Array.prototype.reduceMap = function(fn,thisArg){
return this.reduce((acc,currentValue,currentIndex)=>{
return acc.concat(fn.call(thisArg,currentValue,currentIndex))
},[])
}
console.log([1,2,3,4].reduceMap((item,i)=>{
return ++item;
}))//[2,3,4,5]
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
注意: filter() 不会对空数组进行检测。
注意: filter() 不会改变原始数组。
用法为 array.filter(function(currentValue,index,arr), thisValue)
实现:
Array.prototype.selfFilter = function(fn,thisValue){
var result = [];
for(var i = 0;i<this.length;i++){
fn(this[i])&&result.push(this[i]);
}
return result
}
var ages = [32, 33, 16, 40];
console.log(ages.selfFilter(function(item){return item>18}))//[32,33,40]
定义和用法
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
reduce() 可以作为一个高阶函数,用于函数的 compose。
注意: reduce() 对于空数组是不会执行回调函数的。
用法为array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
实现:
Array.prototype.selfReduce = function(fn,result){
for(var i=0;i<this.length;i++){
result = fn(result,this[i],i,this)
}
return result
};
var arr1 =[1,2,3,4];
let sum =arr1.selfReduce(function(total,cur,index){
return total+cur;
},0)
console.log(sum)//10