语法:

  1. array1.reduce(callbackfn[, initialValue])

参数

定义

array1

必需。一个数组对象。

callbackfn

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

initialValue

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

返回值:

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

异常:

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

  • callbackfn 参数不是函数对象。

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

回调函数语法:

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 方法启动后的条件

元素是否传递给回调函数

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

否。

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

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

元素被更改。

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

从数组中删除元素。

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

实例:

1.下面的示例将数组值连接成字符串,各个值用“::”分隔开。由于未向 reduce 方法提供初始值,第一次调用回调函数时会将“abc”作为 previousValue 参数并将“def”作为 currentValue 参数。

  1. function appendCurrent (previousValue, currentValue) {
  2.    return previousValue + "::" + currentValue;
  3.    }
  4. var elements = ["abc", "def", 123, 456];
  5. var result = elements.reduce(appendCurrent);
  6. document.write(result);
  7. // Output:
  8. //  abc::def::123::456

2.下面的示例向数组添加舍入后的值。使用初始值 0 调用 reduce 方法。

  1. function addRounded (previousValue, currentValue) {
  2.    return previousValue + Math.round(currentValue);
  3.    }
  4. var numbers = [10.9, 15.4, 0.5];
  5. var result = numbers.reduce(addRounded, 0);
  6. document.write (result);
  7. // Output: 27

3.下面的示例向数组中添加值。 currentIndex 和 array1 参数用于回调函数

  1. function addDigitValue(previousValue, currentDigit, currentIndex, array) {
  2.    var exponent = (array.length - 1) - currentIndex;
  3.    var digitValue = currentDigit * Math.pow(10, exponent);
  4.    return previousValue + digitValue;
  5.    }
  6. var digits = [4, 1, 2, 5];
  7. var result = digits.reduce(addDigitValue, 0);
  8. document.write (result);
  9. // Output: 4125

此题分析:

首先赋予了初始值0,那么currentDigit就是从4开始的,调用方法四次,这样可以把四次方法调用的参数都写出来:(0,4,0,array)、(4,1,1,array)、(1,2,2,array)、(2,5,3,array),再一次进行计算,由于初始值是0,所有只需要计算出每个方法的返回值最后相加即可。array.length始终为4,则四次计算的值分别为4000+100+20+5=4125

reduceRight 方法(降序)

reduceRight的语法以及回调函数的规则和reduce方法是一样的,区别就是在与reduce是升序,即角标从0开始,而reduceRight是降序,即角标从arr.length-1开始。如果有初始值,则从最后一个数开始计算,如果没有初始值,则previousValue参数是数组中最后一个元素的值,currentValue是数组中倒数第二个元素的值。

示例:

1.下面的示例获取数组中值为 1 到 10 之间的元素。提供给 reduceRight 方法的初始值是一个空数组。

  1. function Process2(previousArray, currentValue) {
  2.    var nextArray;
  3.    if (currentValue >= 1 && currentValue <= 10)
  4.        nextArray = previousArray.concat(currentValue);
  5.    else
  6.        nextArray = previousArray;
  7.    return nextArray;
  8. }
  9. var numbers = [20, 1, -5, 6, 50, 3];
  10. var emptyArray = new Array();
  11. var resultArray = numbers.reduceRight(Process2, emptyArray);
  12. document.write("result array=" + resultArray);
  13. // Output:
  14. //  result array=3,6,1
2.reduceRight 方法可应用于字符串。下面的示例演示如何使用此方法反转字符串中的字符。
  1. function AppendToArray(previousValue, currentValue) {
  2.    return previousValue + currentValue;
  3. }
  4. var word = "retupmoc";
  5. var result = [].reduceRight.call(word, AppendToArray, "the ");
  6. // var result = Array.prototype.reduceRight.call(word, AppendToArray, "the ");
  7. document.write(result);
  8. // Output:
  9. // the computer
这里可以直接使用空数组调用reduceRight方法,并且使用call方法将参数引入。也可以是直接使用原型链的方式进行调用,即Array.prototype.reduceRight.call(word, AppendToArray, "the ");

reduce 方法(升序)的更多相关文章

  1. reduce 方法 (Array) (JavaScript)

    对数组中的所有元素调用指定的回调函数.该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供. 语法         array1.reduce(callbackfn[, in ...

  2. es 5 数组reduce方法记忆

    reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值. 概念:对数组中的所有元素调用指定的回调函数.该回调函数的返回值为累积结果,并 ...

  3. ES6中的数组reduce()方法详解

    reduce() 方法对数组中的每个元素执行一个由我们提供的reducer函数(升序执行),将其结果汇总为单个返回值. 1. 语法reduce说明 arr.reduce(callback(accumu ...

  4. JavaScript - reduce方法,reduceRight方法 (Array)

    JavaScript - reduce方法 (Array) 解释:reduce() 方法接收一个函数作为累加器(accumulator),数组 中的每个值(从左到右)开始合并,最终为一个值. 语法:a ...

  5. JavaScript数组的reduce方法详解

    数组经常用到的方法有push.join.indexOf.slice等等,但是有一个经常被我们忽略的方法:reduce,这个方法简直强大的不要不要的. 我们先来看看这个方法的官方概述:reduce()  ...

  6. JavaScript中reduce()方法

    原文  http://aotu.io/notes/2016/04/15/2016-04-14-js-reduce/   JavaScript中reduce()方法不完全指南 reduce() 方法接收 ...

  7. 在JavaScript函数式编程里使用Map和Reduce方法

    所有人都谈论道workflows支持ECMAScript6里出现的令人吃惊的新特性,因此我们很容易忘掉ECMAScript5带给我们一些很棒的工具方法来支持在JavaScript里进行函数编程,这些工 ...

  8. MapReduce中一次reduce方法的调用中key的值不断变化分析及源码解析

    摘要:mapreduce中执行reduce(KEYIN key, Iterable<VALUEIN> values, Context context),调用一次reduce方法,迭代val ...

  9. js数组中的find(), findIndex(), filter(), forEach(), some(), every(), map(), reduce()方法的详解和应用实例

    1. find()与findIndex() find()方法,用于找出第一个符合条件的数组成员.它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该 ...

随机推荐

  1. 谷歌浏览器安装apizza

    接口测试是卡发中不可缺少的一环,那么常用的postman是英文就很不方便一些小伙伴的使用,所以此工具和postman功能相同且升级并且是中文模式 安装: 链接:https://pan.baidu.co ...

  2. CentOS7利用docker安装MySQL5.7

    CentOS7利用docker安装MySQL5.7 前提条件 centos7 且内核版本高于3.10, 可通过以下命令查看内核版本 uname -r 利用yum 安装docker 安装一些必要的系统工 ...

  3. [CCPC2019秦皇岛] F. Forest Program

    [CCPC2019秦皇岛 F] Link https://codeforces.com/gym/102361/problem/F Description 给定一个仙人掌,删去一些边可以让它变成一个森林 ...

  4. PP: Composite visual mapping for time series visualization

    However: The conventional visual mapping maps each data attribute onto a single visual channel Purpo ...

  5. Binary Number(位运算)

    #include<bits/stdc++.h> using namespace std; int n; int getBits1(int n)//求取一个数的二进制形式中1的个数. { i ...

  6. Android基础知识 -- Fragment

    Fragment是android3.0后提供的API(所以android:minSdkVersion="11"以上版本),主要针对平板UI.有自己的生命周期,但是必须依附在Acti ...

  7. windows10 +ubuntu双系统

    1,安装之前的准备: 制作启动盘 确定给ubuntu多少分区并且清理为free状态 确定电脑的开机引导方式,传统方式引号和uefi引导并不一样,因此我们需要根据引导方式选择新系统制作什么样的启动盘 在 ...

  8. java面试题错题集(牛客网错题)

    一.关于Object类的说法正确 Java中所有的类都直接或间接继承自Object,无论是否明确的指明,无论其是否是抽象类. Object的equals方法,只有一句话,return this==ob ...

  9. MySql5.6表操作

    MySql5.6表操作 数据类型 整型 浮点型 字符类型 日期类型 枚举类型与集合类型 约束条件 Primary key Unique key Not null Foreign key 创建表的完整语 ...

  10. 2.2 logistic回归损失函数(非常重要,深入理解)

    上一节当中,为了能够训练logistic回归模型的参数w和b,需要定义一个成本函数 使用logistic回归训练的成本函数 为了让模型通过学习来调整参数,要给出一个含有m和训练样本的训练集 很自然的, ...