JavaScript reduce和reduceRight详解,reducereduceright

By admin in 4858美高梅 on 2019年8月24日

JavaScript reduce和reduceRight详解,reducereduceright

reduce 方法(升序)

语法:  

array1.reduce(callbackfn[,
initialValue])

参数

定义

array1

必需。一个数组对象。

callbackfn

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

initialValue

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

返回值:

        通过末了贰回调用回调函数得到的积聚结果。

异常:

        当满意下列任一条件时,将抓住 TypeError 极度:

  1. callbackfn 参数不是函数对象。
  2. 数组不含有成分,且未提供 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 参数。

function appendCurrent (previousValue, currentValue) {
 return previousValue + "::" + currentValue;
 }
var elements = ["abc", "def", 123, 456];
var result = elements.reduce(appendCurrent);
document.write(result);
// Output:
// abc::def::123::456

2.上面包车型地铁演示向数组加多舍入后的值。使用伊始值 0 调用 reduce 方法。

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

3.下边包车型地铁亲自去做向数组中增加值。 currentIndex 和 array1 参数用于回调函数

function addDigitValue(previousValue, currentDigit, currentIndex, array) {
 var exponent = (array.length - 1) - currentIndex;
 var digitValue = currentDigit * Math.pow(10, exponent);
 return previousValue + digitValue;
 }
var digits = [4, 1, 2, 5];
var result = digits.reduce(addDigitValue, 0);
document.write (result);
// 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,则四遍计算的值分别为伍仟+100+20+5=4125

reduceRight 方法(降序)

reduceRight的语法以及回调函数的条条框框和reduce方法是均等的,不相同就是在与reduce是升序,即角标从0开头,而reduceRight是降序,即角标从arr.length-1初始。假若有伊始值,则从最终一个数开头臆想,若无初阶值,则previousValue参数是数组中最终多少个因素的值,currentValue是数组中尾数第二个要素的值。

示例:

1.上面包车型地铁亲自过问获取数组中值为 1 到 10 之间的要素。提需要 reduceRight
方法的开始值是多个空数组。

function Process2(previousArray, currentValue) {
 var nextArray;
 if (currentValue >= 1 && currentValue <= 10)
  nextArray = previousArray.concat(currentValue);
 else
  nextArray = previousArray;
 return nextArray;
}
var numbers = [20, 1, -5, 6, 50, 3];
var emptyArray = new Array();
var resultArray = numbers.reduceRight(Process2, emptyArray);
document.write("result array=" + resultArray);
// Output:
// result array=3,6,1

2.reduceRight
办法可选择于字符串。下边的以身作则演示怎么样使用此格局反转字符串中的字符。

function AppendToArray(previousValue, currentValue) {
 return previousValue + currentValue;
}
var word = "retupmoc";
var result = [].reduceRight.call(word, AppendToArray, "the ");
// var result = Array.prototype.reduceRight.call(word, AppendToArray, "the ");
document.write(result);
// Output:
// the computer

这里能够一向利用空数组调用reduceRight方法,并且利用call方法将参数引进。也能够是向来运用原型链的主意实行调用,即Array.prototype.reduceRight.call(word,
AppendToArray, “the “);

感激阅读,希望能协理到大家,感激大家对本站的支撑!

reduce和reduceRight详解,reducereduceright reduce 方法(升序) 语法:
array1.reduce(callbackfn[4858美高梅,, initialValue]) 参数 定义 array1
必须。壹个数组对象…

reduce 方法(升序)

语法

对数组中的全部因素调用钦定的回调函数。
该回调函数的重临值为堆叠加果,何况此重临值在下二遍调用该回调函数时作为参数提供。

语法:  

.aspx#Anchor_0)

语法

array1.reduce(callbackfn,[ initialValue])

array1.reduce(callbackfn[,
initialValue])

array1.reduce(callbackfn[, initialValue])

返回值

因此最后一回调用回调函数得到的积累结果。

参数

定义

array1

必需。一个数组对象。

callbackfn

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

initialValue

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

参数

异常

当满意下列任一条件时,将引发 TypeErrorJavaScript reduce和reduceRight详解,reducereduceright。 异常:

  • callbackfn 参数不是函数对象。
  • 数组不分包元素,且未提供 initialValue

返回值:

.aspx#Anchor_1)

备注

若是提供了 initialValue,则 reduce
方法会对数组中的每一种成分调用三遍 callbackfn 函数(按升序索引顺序)。

一经未提供 initialValue,则reduce
方法会对从第2个因素起先的种种成分调用 callbackfn 函数。

回调函数的再次来到值在下二遍调用回调函数时作为 previousValue 参数提供。
最后三次调用回调函数获得的再次来到值为 reduce 方法的重回值。

不为数组中紧缺的要素调用该回调函数。

        通过最终贰遍调用回调函数获得的储存结果。

参数             定义

注意

reduceRight 方法 (Array) (JavaScript) processes the elements in
descending index order.” 按降序索引顺序管理元素。

回调函数语法

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

function callbackfn(previousValue, currentValue, currentIndex, array1)

可利用最多八个参数来声称回调函数。

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

回调参数 定义
previousValue 通过上一次调用回调函数获得的值。
initialValue 如果向 reduce 方法提供 initialValue,则在首次调用函数previousValue为initialValue
currentValue 当前数组元素的值。
currentIndex 当前数组元素的数字索引。
array1 包含该元素的数组对象。

异常:


第四回调用回调函数

在首先次调用回调函数时,作为参数提供的值取决于 reduce 方法是不是富有
initialValue 参数。

  • 要是向 reduce 方法提供 initialValue
    previousValue 参数为 initialValue
    currentValue 参数是数组中的第多少个要素的值。

  • 假如未提供 initialValue
    previousValue 参数是数组中的第贰个成分的值。
    currentValue 参数是数组中的首个成分的值。

        当满意下列任一条件时,将引发 TypeError 卓殊:

array1              必备。四个数组对象。

修改数组对象

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

下表描述了在 reduce 方法运转后修改数组对象所得到的结果。

reduce 方法启动后的条件 元素是否传递给回调函数
在数组的原始长度之外添加元素。 否。
添加元素以填充数组中缺少的元素。 是,如果该索引尚未传递给回调函数。
元素被更改。 是,如果该元素尚未传递给回调函数。
从数组中删除元素。 否,除非该元素已传递给回调函数。

上面包车型客车示范将数组值连接成字符串,各种值用“::”分隔绝。
是因为未向 reduce 方法提供初步值,第二回调用回调函数时会将“abc”作为
previousValue 参数并将“def”作为 currentValue 参数。

JavaScript

// Define the callback function.
function appendCurrent (previousValue, currentValue) {
 return previousValue + "::" + currentValue; 
}
// Create an array.
var elements = ["abc", "def", 123, 456];
// Call the reduce method, which calls the callback function
// for each array element.
var result = elements.reduce(appendCurrent);
document.write(result);
// Output:
// abc::def::123::456

上面包车型地铁以身作则向数组增加舍入后的值。

行使开首值 0 调用 reduce 方法。

JavaScript

// Define the callback function.
function addRounded (previousValue, currentValue) {
 return previousValue + Math.round(currentValue);
}
// Create an array.
var numbers = [10.9, 15.4, 0.5];
// Call the reduce method, starting with an initial value of 0.
var result = numbers.reduce(addRounded, 0);
document.write (result);
// Output: 27

上面包车型客车演示向数组中增多值。
currentIndexarray1 参数用于回调函数。

JavaScript

function addDigitValue(previousValue, currentDigit, currentIndex, array) {
 var exponent = (array.length - 1) - currentIndex; 
 var digitValue = currentDigit * Math.pow(10, exponent); 
 return previousValue + digitValue;
}
var digits = [4, 1, 2, 5];
// Determine an integer that is computed from values in the array.
var result = digits.reduce(addDigitValue, 0);
document.write (result);
// Output: 4125

上面包车型客车示范获取贰个数组,该数组仅满含另三个数组中的介于 1 和 10
之间值。
提供给 reduce 方法的开头值是三个空数组。

JavaScript

function Process(previousArray, currentValue) { 
 // If currentValue is between 1 and 10, 
 // append currentValue to the array. var nextArray;
  if (currentValue >= 1 && currentValue <= 10){
    nextArray = previousArray.concat(currentValue); 
  } else(nextArray =  debugger){
     console.log(this.filterParam.title)
  }
 // If this is not the last call by the reduce method, 
 // the returned array is previousArray on the next call.
 // If this is the last call by the reduce method, the
 // returned array is the return value of the reduce method. return nextArray;
}
// Create an array.
var numbers = [20, 1, -5, 6, 50, 3];
// Call the reduce method, starting with an initial empty array.
var emptyArray = new Array();
var resultArray = numbers.reduce(Process, emptyArray);
document.write("result array=" + resultArray);
// Output:
// result array=1,6,3

要求

在偏下文书档案形式中受支持:Internet Explorer 9 规范形式、Internet Explorer
10 标准格局和 Internet Explorer 11
标准情势。其余,也在动用百货店应用(Windows 8 和 Windows Phone
8.1)中受支持。请参阅版本消息.aspx)。
在以下文书档案情势中不受扶助:Quirks、Internet Explorer 6 规范格局、Internet
Explorer 7 规范情势、Internet Explorer 8 规范形式。

  1. callbackfn 参数不是函数对象。
  2. 数组不分包成分,且未提供 initialValue。

callbackfn      
 
必备。三个承受最多七个参数的函数。对于数组中的每种成分,reduce格局都会调用callbackfn函数一
                          次。

回调函数语法:

initialValue      
 
可选。假使钦命initialValue,则它将用作最早值来运行积累。第壹遍调用callbackfn函数会将此值作为参
                         数而非数组值提供。

    function callbackfn(previousValue,
currentValue, currentIndex, array1)


    可应用最多八个参数来声称回调函数。

返回值

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

.aspx#Anchor_2)

回调参数

定义

previousValue

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

currentValue

当前数组元素的值。

currentIndex

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

array1

包含该元素的数组对象。

经过最终三遍调用回调函数获得的储存结果。

首先次调用回调函数

异常

在首先次调用回调函数时,作为参数提供的值取决于 reduce 方法是或不是持有
initialValue 参数。

.aspx#Anchor_3)

倘使向 reduce 方法提供 initialValue:

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

previousValue 参数为 initialValue。
currentValue 参数是数组中的第一个因素的值。

callbackfn参数不是函数对象。

一经未提供 initialValue:

数组不含有成分,且未提供initialValue

previousValue 参数是数组中的第八个因素的值。
currentValue 参数是数组中的第一个元素的值。

ExceptionCondition

修改数组对象

备注

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

.aspx#Anchor_4)

下表描述了在 reduce 方法运营后修改数组对象所收获的结果。

一经提供了initialValue,则reduce方法会对数组中的种种成分调用三遍callbackfn函数(按升序索引顺序)。即使未提供initialValue,则reduce方法会对从第一个要素开端的各样成分调用callbackfn函数。

reduce 方法启动后的条件

元素是否传递给回调函数

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

否。

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

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

元素被更改。

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

从数组中删除元素。

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

回调函数的再次回到值在下叁回调用回调函数时作为previousValue参数提供。最终二回调用回调函数获得的重临值为reduce方法的重返值。

实例:

不为数组中缺乏的成分调用该回调函数。

1.底下的演示将数组值连接成字符串,种种值用“::”分隔断。由于未向 reduce
方法提供开头值,第三回调用回调函数时会将“abc”作为 previousValue
参数并将“def”作为 currentValue 参数。

reduceRight 方法 (Array)
(JavaScript).aspx)按降序索引顺序管理成分。

function appendCurrent (previousValue, currentValue) {
 return previousValue + "::" + currentValue;
 }
var elements = ["abc", "def", 123, 456];
var result = elements.reduce(appendCurrent);
document.write(result);
// Output:
// abc::def::123::456

回调函数语法

2.底下的身体力行向数组增添舍入后的值。使用开首值 0 调用 reduce 方法。

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

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

function callbackfn(previousValue, currentValue, currentIndex, array1)

3.底下的演示向数组中增添值。 currentIndex 和 array1 参数用于回调函数

可利用最多几个参数来声称回调函数。

function addDigitValue(previousValue, currentDigit, currentIndex, array) {
 var exponent = (array.length - 1) - currentIndex;
 var digitValue = currentDigit * Math.pow(10, exponent);
 return previousValue + digitValue;
 }
var digits = [4, 1, 2, 5];
var result = digits.reduce(addDigitValue, 0);
document.write (result);
// 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,则六次总括的值分别为5000+100+20+5=4125

回调参数                      定义

reduceRight 方法(降序)

previousValue            
 
经过上三次调用回调函数获得的值。若是向reduce主意提供initialValue,则在第一遍调用函数时,
                                     previousValueinitialValue

reduceRight的语法以及回调函数的条条框框和reduce方法是一致的,差距正是在与reduce是升序,即角标从0伊始,而reduceRight是降序,即角标从arr.length-1初叶。如若有开端值,则从最终二个数开头估摸,若无起首值,则previousValue参数是数组中最后叁个要素的值,currentValue是数组中倒数第2个成分的值。

currentValue                 当前数组成分的值。

示例:

currentIndex                   当下数组成分的数字索引。

1.底下的演示获取数组中值为 1 到 10 之间的元素。提必要 reduceRight
方法的开首值是三个空数组。

array1                             蕴涵该因素的数组对象。

function Process2(previousArray, currentValue) {
 var nextArray;
 if (currentValue >= 1 && currentValue <= 10)
  nextArray = previousArray.concat(currentValue);
 else
  nextArray = previousArray;
 return nextArray;
}
var numbers = [20, 1, -5, 6, 50, 3];
var emptyArray = new Array();
var resultArray = numbers.reduceRight(Process2, emptyArray);
document.write("result array=" + resultArray);
// Output:
// result array=3,6,1

2.reduceRight
主意可利用于字符串。上边包车型大巴演示演示怎样选择此方法反转字符串中的字符。

第三遍调用回调函数

function AppendToArray(previousValue, currentValue) {
 return previousValue + currentValue;
}
var word = "retupmoc";
var result = [].reduceRight.call(word, AppendToArray, "the ");
// var result = Array.prototype.reduceRight.call(word, AppendToArray, "the ");
document.write(result);
// Output:
// the computer

在首先次调用回调函数时,作为参数提供的值取决于reduce格局是或不是持有initialValue参数。

这里可以一贯运用空数组调用reduceRight方法,何况动用call方法将参数引进。也得以是一向动用原型链的秘诀打开调用,即Array.prototype.reduceRight.call(word,
AppendToArray, “the “);

若果向 reduce 方法提供initialValue

谢谢阅读,希望能支援到大家,多谢大家对本站的支撑!

previousValue参数为initialValue

您恐怕感兴趣的小说:

  • 详解JS数组Reduce()方法详解及高档能力
  • JavaScript之map
    reduce_引力节点Java大学整理
  • 无循环
    JavaScript(map、reduce、filter和find)
  • Javascript面试卓越套路reduce函数查重
  • 详解JS: reduce方法实现webpack多文件输入
  • 深入分析JavaScript数组方法reduce
  • 详解JavaScript中数组的reduce方法
  • Javascript中内建函数reduce的利用详解
  • JavaScript中自带的
    reduce()方法运用示例详解
  • JavaScript中reduce()方法的采纳详解
  • JavaScript
    mapreduce专业规律简析
  • js数组方法reduce非凡用法代码分享

currentValue参数是数组中的第多个因素的值。

只要未提供initialValue

previousValue参数是数组中的第贰个要素的值。

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

修改数组对象

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

下表描述了在reduce主意运维后修改数组对象所获取的结果。

reduce艺术运转后的条件

要素是不是传递给回调函数

在数组的原始长度之外添日币素。

否。

添日币素以填充数组中贫乏的元素。

是,假设该索引尚未传递给回调函数。

要素被转移。

是,假如该因素尚未传递给回调函数。

从数组中剔除成分。

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

上面包车型大巴演示将数组值连接成字符串,各类值用“::”分隔绝。由于未向reduce方式提供初叶值,第三遍调用回调函数时会将“abc”作为previousValue参数并将“def”作为currentValue参数。

JavaScript

// Define the callback function.functionappendCurrent (previousValue,
currentValue) {returnpreviousValue +”::”+ currentValue;    }// Create an
array.varelements = [“abc”,”def”, 123, 456];// Call the reduce method,
which calls the callback function// for each array element.varresult =
elements.reduce(appendCurrent);document.write(result);// Output:// 
abc::def::123::456

下边包车型大巴身体力行向数组添加舍入后的值。使用起先值 0 调用reduce方法。

JavaScript

// Define the callback function.functionaddRounded (previousValue,
currentValue) {returnpreviousValue + Math.round(currentValue);    }//
Create an array.varnumbers = [10.9, 15.4, 0.5];// Call the reduce
method, starting with an initial value of 0.varresult =
numbers.reduce(addRounded, 0);document.write (result);// Output: 27

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有