最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • js 手撕Array.reduce

    正文概述 掘金(Daes)   2021-02-10   510

    前言

    自我学习手撕js代码,今天自己手撕一下Array.reduce方法。 每天学习一点。记录一下?

    MDN文档(reduce):

    以下是自我理解:

    reduce方法接受两个参数

    1. 回调函数callback参数有四个
      1. total 累加值,每次执行回调执行返回的值。
      2. item 当前需要处理值
      3. index 当前值索引 (可选)
      4. arr 当前数组 (可选)
    2. initialValue 默认值 (可选)
      1. 如果传递initialValue第一次从索引0开始 首次返回默认值,如果没有提供初始值,则将使用数组中的第一个元素。
      2. 在没有默认值的空数组调用reduce会报错

    开始鲁代码

    1.创建myReduce函数

    2.挂载在Array原型上,this指向调用数组

    reduce() 代码

    // callback 回调函数
    Array.prototype.myReduce = function (callback) {
      const initVal = arguments[1] ? arguments[1] : ""; // 获取默认值
      const len = this.length;
      if(!len && !initVal) { // 没有默认值并且空数组报错
        throw Error('Reduce of empty array with no initial value');
      }
      if(!len) return initVal; // 空数组不执行回调函数
      
      let total = initVal ? initVal : this[0]; // 是否有默认值,没有就取索引0的值
      
      let i = initVal ? 0 : 1;
      for(; i < len; i++) {
        total = callback(total, this[i], i, this); // 每次执行回调返回的值赋值给total
      }
      
      // 最后返回累加值
      return total;
    }
    

    下面我们运行看看结果(没有传递默认值):

    const arr = [1,2,3,4,5];
    
    const total = arr.myReduce(function(total, item, index, arr) {
      console.log(total, item, index, arr);
      return total + item;
      // expected results:  1, 2, 1, [1,2,3,4,5]
    },);
    
    console.log(total); // expected results 15
    

    如图: js 手撕Array.reduce

    传递第二参数 有默认值:

     const total = arr.myReduce(function (total, item, index, arr) {
          console.log(total, item, index, arr);
          return total + item;
          // expected results:  1, 2, 1, [1,2,3,4,5]
        }, 10);
    
      console.log(total); // expected results 25
      
    

    如图: js 手撕Array.reduce

    到这里就完成✅Array.reduce方法的实现。


    起源地下载网 » js 手撕Array.reduce

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元