最快的JavaScript总和

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

在JavaScript中总结数组的最快方法是什么?快速搜索可以找出几种不同的方法,但如果可能的话,我想要一个本机解决方案。这将在SpiderMonkey下运行。

我一直在使用的框内思考:

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

我确信有一个更好的方法,然后直接迭代。

提问于
用户回答回答于

你应该可以使用reduce

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

在ES6中引入了arrow functions,它更简单:

sum = array.reduce((pv, cv) => pv+cv, 0);
用户回答回答于

你的循环结构可以做得更快:

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

这会检索array.length一次,而不是每次迭代。通过缓存该值进行优化。

如果你真的想加快速度:

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

这相当于一段时间的反向循环。它缓存该值并将其与0进行比较,从而更快地进行迭代。

有关更完整的比较列表,请参阅我的JSFiddle注意: array.reduce在那里很糟糕,但是在Firebug Console中它是最快的。比较结构

我开始了一个用于数组求和的 JSPerf。它很快被构建出来,并不能保证是完整或准确的,但这就是编辑的目的:)

扫码关注云+社区