元素之和,代码之间的差异

时间:2013-07-31 07:05:04

标签: javascript sum

我有两段代码都计算数组元素的总和:

var sum = array.reduce(function(previousValue, currentValue) {
    return previousValue + currentValue;
}, 0);

var sum = 0;
array.forEach(function(e) {
    sum += e;
});

除了不同的实现之外,它们之间是否存在任何差异?何时使用哪一个更好?

3 个答案:

答案 0 :(得分:3)

除了您的个人风格偏好外,实际表现也可能存在差异。然而,这两个看起来表现相似。

如果您正在进行此操作(或对于大型数组),请考虑使用第三种方式:

var sum = 0;
for (l = array.length; l--; ) { sum += array[l]; }

这会更快。检查this performance test以获得实际结果。

注意:如果缓存数组长度,您将获得一些速度。所以不要这样做:

for (var i = 0; i < array.length; i++) {...}

这样做:

var l = array.length;
for (; l--; ) { ... }

或者这个:

for (l = array.length; l--;) { ... }

答案 1 :(得分:2)

第一个比第二个略重。 最快的方法是避免为每个步骤调用函数并使用for等循环。

var sum = 0;
for(var i=0, len=array.length; i<len; i++){
    sum += array[i]; 
}

答案 2 :(得分:1)

因为使用这两个函数都涉及为每个元素执行回调函数,这会导致函数调用开销(所以两者都没有效果),使用循环会提供更好的性能。