Fastest JavaScript summation Fastest JavaScript summation arrays arrays

Fastest JavaScript summation


You should be able to use reduce.

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

Source

And with arrow functions introduced in ES6, it's even simpler:

sum = array.reduce((pv, cv) => pv + cv, 0);


Improvements


Your looping structure could be made faster:


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

This retrieves array.length once, rather than with each iteration. The optimization is made by caching the value.


If you really want to speed it up:


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

This is equivalent to a while reverse loop. It caches the value and is compared to 0, thus faster iteration.

For a more complete comparison list, see my JSFiddle.
Note: array.reduce is horrible there, but in Firebug Console it is fastest.


Compare Structures

I started a JSPerf for array summations. It was quickly constructed and not guaranteed to be complete or accurate, but that's what edit is for :)


While searching for the best method to sum an array, I wrote a performance test.

In Chrome, "reduce" seems to be vastly superior

I hope this helps

// 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");

eval: 5233.000ms

loop: 255.000ms

reduce: 70.000ms

while: 214.000ms