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

Sum of elements, differences between code

本文关键字:之间 代码 元素      更新时间:2023-09-26

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

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

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

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

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

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

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--;) { ... }

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

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

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