reduce实现数组求和

对于实现数组求和,我们常用的思路是通过for、while,对数组进行迭代,依次将他们的值加起来,下面列举常用的两种方法

第一种:

var arr = [1,2,3,4,5,6]; 
Array.prototype.sum = function (){ 
    var sumResult = 0; 
    for (var i = 0; i < this.length; i++) { 
      sumResult += parseInt(this[i]); 
    } 
    return sumResult; 
} 
arr.sum(); 

第二种:

var arr = [1,2,3,4,5,6]; 
Array.prototype.sum = function () { 
    var sumResult = 0; 
    var i = this.length; 
    while (i--) { 
        sumResult += parseInt(this[i]); 
    } 
    return sumResult; 
} 
arr.sum();

经时间对比验证,此两种方法耗时较多。

安利一种新方法,reduce方法。

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

语法: array1.reduce(callbackfn[, initialValue])

reduce()方法接收callbackfn函数,而这个函数包含四个参数:

  function callbackfn(preValue,curValue,index,array){}

  • preValue: 上一次调用回调返回的值,或者是提供的初始值(initialValue)
  • curValue: 数组中当前被处理的数组项
  • index: 当前数组项在数组中的索引值
  • array: 调用 reduce()方法的数组

回调函数第一次执行时,preValue 和 curValue 可以是一个值,如果 initialValue 在调用 reduce() 时被提供,那么第一个 preValue 等于 initialValue ,并且curValue 等于数组中的第一个值;如果initialValue 未被提供,那么preValue 等于数组中的第一个值,`curValue等于数组中的第二个值。eg:

var arr = [0,1,2,3,4]; 
arr.reduce(function (preValue,curValue,index,array) { 
    return preValue + curValue; 
}); 

上个例子中的回调函数会被执行4次,

下面就用reduce实现我们的数组求和: 

var arr = [1,2,3,4,5,6]; 
Array.prototype.sum = function (){ 
    var sumResult = 0; 
    return this.reduce(function (preValue, curValue) {
     return sumResult = preValue + curValue; 
    });
    return sumResult;
} 
console.log(arr.sum());

 结论:三种方法,经对比,reduce用时最短,性能最佳。

参考文章:http://www.w3cplus.com/javascript/array-part-8.html

原文地址:https://www.cnblogs.com/xiaoli52qd/p/7392700.html