0

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

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

或者

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

除了不同的实现之外,它们之间有什么区别吗?什么时候使用哪个更好?

4

3 回答 3

3

除了您的个人风格偏好外,实际表现也可能有所不同。然而,这两个看起来表现相似。

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

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

这会更快。检查此性能测试的实际结果。

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

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

做这个:

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

或这个:

for (l = array.length; l--;) { ... }
于 2013-07-31T07:12:26.680 回答
2

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

var sum = 0;
for(var i=0, len=array.length; i<len; i++){
    sum += array[i]; 
}
于 2013-07-31T07:14:53.027 回答
1

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

于 2013-07-31T07:31:03.400 回答