我有两段代码都计算数组元素的总和:
var sum = array.reduce(function(previousValue, currentValue) {
return previousValue + currentValue;
}, 0);
或
var sum = 0;
array.forEach(function(e) {
sum += e;
});
除了不同的实现之外,它们之间是否存在任何差异?何时使用哪一个更好?
答案 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)
因为使用这两个函数都涉及为每个元素执行回调函数,这会导致函数调用开销(所以两者都没有效果),使用循环会提供更好的性能。