我有两段代码都计算数组元素的总和:
var sum = array.reduce(function(previousValue, currentValue) {
return previousValue + currentValue;
}, 0);
或者
var sum = 0;
array.forEach(function(e) {
sum += e;
});
除了不同的实现之外,它们之间有什么区别吗?什么时候使用哪个更好?
我有两段代码都计算数组元素的总和:
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];
}
由于使用这两个函数都涉及为每个元素执行回调函数,这会导致函数调用开销(因此两者都不是有效的),因此使用循环将提供更好的性能。