您好,欢迎访问一九零五行业门户网

reduce和reduceRight详解

reduce 方法(升序)
语法:   
array1.reduce(callbackfn[, initialvalue])
返回值:
        通过最后一次调用回调函数获得的累积结果。
异常:
        当满足下列任一条件时,将引发 typeerror 异常:
callbackfn 参数不是函数对象。
数组不包含元素,且未提供 initialvalue。
回调函数语法:
    function callbackfn(previousvalue, currentvalue, currentindex, array1)
    可使用最多四个参数来声明回调函数。
    下表列出了回调函数参数。
第一次调用回调函数
在第一次调用回调函数时,作为参数提供的值取决于 reduce 方法是否具有 initialvalue 参数。
如果向 reduce 方法提供 initialvalue:
previousvalue 参数为 initialvalue。
currentvalue 参数是数组中的第一个元素的值。
如果未提供 initialvalue:
previousvalue 参数是数组中的第一个元素的值。
currentvalue 参数是数组中的第二个元素的值。
修改数组对象
数组对象可由回调函数修改。
下表描述了在 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,则四次计算的值分别为4000+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 );
其它类似信息

推荐信息