js 数组map filter reduce的实现

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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值