Jos*_*h K 63 javascript arrays function
在JavaScript中总结数组的最快方法是什么?快速搜索会转换几种不同的方法,但如果可能的话,我想要一个本机解决方案.这将在SpiderMonkey下运行.
在我一直在使用的内部思考:
var count = 0;
for(var i = 0; i < array.length; i++)
{
count = count + array[i];
}
Run Code Online (Sandbox Code Playgroud)
我确信有更好的方法然后直接迭代.
Cha*_*ion 123
你应该可以使用reduce.
var sum = array.reduce(function(pv, cv) { return pv + cv; }, 0);
Run Code Online (Sandbox Code Playgroud)
使用ES6中引入的箭头功能,它甚至更简单:
sum = array.reduce((pv, cv) => pv + cv, 0);
Run Code Online (Sandbox Code Playgroud)
vol*_*ron 30
var count = 0;
for(var i=0, n=array.length; i < n; i++)
{
count += array[i];
}
Run Code Online (Sandbox Code Playgroud)
这将检索array.length一次,而不是每次迭代.通过缓存值来进行优化.
var count=0;
for (var i=array.length; i--;) {
count+=array[i];
}
Run Code Online (Sandbox Code Playgroud)
这相当于一段时间的反向循环.它缓存该值并与0进行比较,从而加快迭代速度.
有关更完整的比较列表,请参阅我的JSFiddle.
注意: array.reduce在那里很糟糕,但在Firebug Console中它是最快的.
我开始使用 JSPerf进行数组求和.它很快被构建,并不能保证完整或准确,但这就是编辑的目的:)
Ink*_*sou 20
在寻找对数组求和的最佳方法时,我写了一个性能测试.
在Chrome中,"减少"似乎非常优越
我希望这有帮助
// Performance test, sum of an array
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var result = 0;
// Eval
console.time("eval");
for(var i = 0; i < 10000; i++) eval("result = (" + array.join("+") + ")");
console.timeEnd("eval");
// Loop
console.time("loop");
for(var i = 0; i < 10000; i++){
result = 0;
for(var j = 0; j < array.length; j++){
result += parseInt(array[j]);
}
}
console.timeEnd("loop");
// Reduce
console.time("reduce");
for(var i = 0; i < 10000; i++) result = array.reduce(function(pv, cv) { return pv + parseInt(cv); }, 0);
console.timeEnd("reduce");
// While
console.time("while");
for(var i = 0; i < 10000; i++){
j = array.length;
result = 0;
while(j--) result += array[i];
}
console.timeEnd("while");
Run Code Online (Sandbox Code Playgroud)
评分:5233.000ms
循环:255.000ms
减少:70.000ms
while:214.000ms
否则您可以用邪恶的方式做到这一点。
var a = [1,2,3,4,5,6,7,8,9];
sum = eval(a.join("+"));
Run Code Online (Sandbox Code Playgroud)
;)
根据这个测试,最快的循环是反向循环
var i = arr.length; while (i--) { }
Run Code Online (Sandbox Code Playgroud)
所以,这段代码可能是你能得到的最快的代码
Array.prototype.sum = function () {
var total = 0;
var i = this.length;
while (i--) {
total += this[i];
}
return total;
}
Run Code Online (Sandbox Code Playgroud)
Array.prototype.sum 将sum方法添加到数组类中......您可以轻松地将其作为辅助函数.