手写js的几个数组方法:map,filter,forEach等等

依照 ecma262 草案,实现的map的规范如下: 首先手写map函数:

map方法接收两个参数,第一个为函数,第二个一般为this,我们在使用map函数的时候,一般只用添加函数即可。

  let arr=[1,2,3,4,5];
          Array.prototype.mapArray=function(fn,thisArgs){
                 let length=this.length;
                 console.log(this)
                 console.log(thisArgs)
                 let res=[];
                 if(!Array.isArray(this)) throw new TypeError('this is not an array');
                 if(typeof fn!=='function'){
                     throw "error";
                 }
                 if(length==0){
                     return res;
                 }
                 for(let i=0;i<length;i++){
                     res.push(fn.call(thisArgs,this[i],i,this));
                 }
                 return res;
          }
         var p= arr.mapArray((item,index,arr)=>{
            return  item+1;
          })
         console.log(p)
          

大家可以仔细这个map方法的实现!

依照 ecma262 草案,实现的 reduce 的规范如下 :

 下面我们实现手写reduce

  var arr=[1,2,3,4,5];
    Array.prototype.reduceArr=function(fn,initvalue){
        if(typeof fn!='function'){
            throw new Error('current params in not correct');
        }
        let arr=this;
        let initIndex;
        let acc;
        initIndex=arguments.length==1?1:0;
        acc=arguments.length===1?arr[0]:initvalue;
        for(let i=initIndex;i<arr.length;i++){
          acc=  fn(acc,arr[i],i,arr);
        }
        return acc;
    }
    console.log(arr.reduceArr((pre,cur)=>{
        return pre+cur;
    },20))

最后输出了35。

下面实现push,pop 方法:
参照 ecma262 草案的规定,关于 push pop 的规范如下图所示:

 push方法:

   let arr=[1,2,3,4,5];
          Array.prototype.pusharr=function(...value){
             let arr=this;
             let arrlength=this.length;
             let  length=value.length;
             for(let i=0;i<length;i++){
                 arr[arrlength+i]=value[i];
             }
             arr.length=arrlength+length;
             return arr.length;
          }
          arr.pusharr(1,2,4);
          console.log(arr)

最后实现一下filter方法:

 Array.prototype.filterArr=function(callback,thisArg){
          let arr=this;
          if(!Array.isArray(arr)){
              throw "error";
          }
          if(typeof callback!='function'){
              throw 'error';
          }
          let length=arr.length;
          let res=[];
          for(let i=0;i<length;i++){
              if(callback.call(thisArg,arr[i],i,arr)){
                  res.push(arr[i]);
              }
          }
          return res;
     }
     var arr=[1,2,3,4,5];
     var p=arr.filterArr(item=>{
         return item>3
     })
     console.log(p)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript中有多种方法可以遍历数组,其中常用的有mapforEachfilter。 1. map方法map方法会对数组中的每个元素调用一个回调函数,并返回一个新的数组,新数组的元素是原始数组中每个元素经过回调函数处理后的结果。例如,我们有一个数组[1, 2, 3],我们可以使用map方法将每个元素乘以2并返回一个新的数组[2, 4, 6]。map方法不会改变原始数组。 2. forEach方法forEach方法会对数组中的每个元素调用一个回调函数,但它不会返回任何内容。通常,forEach方法用于执行一些操作而不需要返回结果,例如打印数组中的每个元素。与map方法不同,forEach方法无法返回修改后的数组。 3. filter方法filter方法会对数组中的每个元素调用一个回调函数,并返回一个新的数组,新数组的元素是回调函数返回值为true的元素。例如,我们有一个数组[1, 2, 3, 4, 5],我们可以使用filter方法筛选出所有大于2的元素并返回一个新的数组[3, 4, 5]。与map方法类似,filter方法也不会改变原始数组。 这三种方法在遍历数组时具有不同的用途。map方法可以用于对数组中的每个元素进行转换或操作,并返回一个新的数组forEach方法用于执行一些操作而不关心返回值。filter方法用于根据指定的条件筛选出符合条件的元素,并返回一个新的数组。根据具体情况,我们可以选择合适的方法来遍历数组

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值