zoukankan      html  css  js  c++  java
  • es 5 数组reduce方法记忆

    reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值。

    概念:对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。

    语法:

    array1.reduce(callbackfn[, initialValue])

    参数:

    参数

    定义

    array1

    必需。一个数组对象。

    callbackfn

    必需。一个接受最多四个参数的函数。对于数组中的每个元素,reduce 方法都会调用 callbackfn 函数一次。

    initialValue

    可选。如果指定 initialValue,则它将用作初始值来启动累积。第一次调用 callbackfn 函数会将此值作为参数而非数组值提供。

    通过最后一次调用回调函数获得的累积结果。

    当满足下列任一条件时,将引发 TypeError 异常:

    • callbackfn 参数不是函数对象。

    • 数组不包含元素,且未提供 initialValue 

    如果提供了 initialValue,则 reduce 方法会对数组中的每个元素调用一次 callbackfn 函数(按升序索引顺序)。如果未提供 initialValue,则reduce 方法会对从第二个元素开始的每个元素调用 callbackfn 函数。

    回调函数的返回值在下一次调用回调函数时作为 previousValue 参数提供。最后一次调用回调函数获得的返回值为 reduce 方法的返回值。

    不为数组中缺少的元素调用该回调函数。

    注意

    reduceRight 方法 (Array) (JavaScript)按降序索引顺序处理元素。

    回调函数的语法如下所示:

    function callbackfn(previousValue, currentValue, currentIndex, array1)

    可使用最多四个参数来声明回调函数。

    下表列出了回调函数参数。

    回调参数

    定义

    previousValue

    通过上一次调用回调函数获得的值。如果向 reduce 方法提供 initialValue,则在首次调用函数时,previousValue 为initialValue

    currentValue

    当前数组元素的值。

    currentIndex

    当前数组元素的数字索引。

    array1

    包含该元素的数组对象。

    在第一次调用回调函数时,作为参数提供的值取决于 reduce 方法是否具有 initialValue 参数。

    如果向 reduce 方法提供 initialValue

    • previousValue 参数为 initialValue

    • currentValue 参数是数组中的第一个元素的值。

    如果未提供 initialValue

    • previousValue 参数是数组中的第一个元素的值。

    • currentValue 参数是数组中的第二个元素的值。

    数组对象可由回调函数修改。

    下表描述了在 reduce 方法启动后修改数组对象所获得的结果。

    reduce 方法启动后的条件

    元素是否传递给回调函数

    在数组的原始长度之外添加元素。

    否。

    添加元素以填充数组中缺少的元素。

    是,如果该索引尚未传递给回调函数。

    元素被更改。

    是,如果该元素尚未传递给回调函数。

    从数组中删除元素。

    否,除非该元素已传递给回调函数。

    如果单纯看概念,一看就会头晕,但是看示例demo及输出,则对reduce的作用一目了然。

    example:

    [0,1,2,3,4].reduce(function(previousValue, currentValue, index, array){
      return previousValue + currentValue;
    });
    
    //10
    
    [0,1,2,3,4].reduce(function(previousValue, currentValue, index, array){
      return previousValue + currentValue;
    },10);
    
    //20
      [1].reduce(function(previousValue, currentValue, index, array){
        return previousValue + currentValue;
       },20);
    
    
      //21
    
    
    //如果数组仅有一个元素(无论位置如何)并且没有提供initialValue, 或者有提供initialValue但是数组为空,那么此唯一值将被返回并且callback不会被执行。[至少有一个值为  “ 有 ”]
    
      [1].reduce(function(previousValue, currentValue, index, array){
        return previousValue + currentValue;
       });
    
      //1
    
    [].reduce(function(previousValue, currentValue, index, array){
      return previousValue + currentValue;
    },2);
    //2
    
    [null].reduce(function(previousValue, currentValue, index, array){
      return previousValue + currentValue;
    },2);
    //2
    
    //如果出现值为Undefined,则输出NaN
    
    [undefined].reduce(function(previousValue, currentValue, index, array){
      return previousValue + currentValue;
    },2);
    //NaN
    
    [1].reduce(function(previousValue, currentValue, index, array){
      return previousValue + currentValue;
    },undefined);
    NaN
    
    
    //如果数组为空并且没有提供initialValue, 会抛出TypeError [两个值都没有]
    
    [].reduce(function(previousValue, currentValue, index, array){
      return previousValue + currentValue;
    });
    //Uncaught TypeError: Reduce of empty array with no initial value(…)

      {}.reduce(function(previousValue, currentValue, index, array){
        return previousValue + currentValue;
      },10);

    
    

      {}.reduce(function(previousValue, currentValue, index, array){
        return previousValue + currentValue;
      });

      //Uncaught SyntaxError: Unexpected token .

    
    
    例子:将数组所有项相加
    
    var total = [0, 1, 2, 3].reduce(function(a, b) {
        return a + b;
    });

    console.log(total);
    // total == 6 例子: 数组扁平化 var flattened = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) { return a.concat(b); });
    console.log(flattened);
    // flattened is [0, 1, 2, 3, 4, 5]

    参考:http://www.cnblogs.com/leejersey/p/5466091.html

         https://msdn.microsoft.com/library/ff679975(v=vs.94).aspx

  • 相关阅读:
    Install the Maven in your computer
    《李嘉诚全传》--孙良珠
    Crystal Reports 2008(水晶报表) 第一个报表
    《唤醒心中的巨人》--[美]安东尼·罗宾
    《写给女人》--[美]桃乐丝·卡耐基
    Crystal Reports 2008(水晶报表) JDBC连接mysql数据库
    Crystal Reports 2008(水晶报表) 启动时检查更新
    Crystal Reports 2008(水晶报表) 安装
    《百年孤独》--[哥伦比亚]加夫列尔·加西亚·马尔克斯
    《自己拯救自己》--[英]塞缪尔·斯迈尔斯
  • 原文地址:https://www.cnblogs.com/beileixinqing/p/7018452.html
Copyright © 2011-2022 走看看