Sum of values in an array using jQuery [duplicate]
Solution 1:
To also handle floating point numbers:
-
(Older) JavaScript:
var arr = ["20.0","40.1","80.2","400.3"], n = arr.length, sum = 0; while(n--) sum += parseFloat(arr[n]) || 0;
-
ECMA 5.1/6:
var arr = ["20.0","40.1","80.2","400.3"], sum = 0; arr.forEach(function(num){sum+=parseFloat(num) || 0;});
-
ES6:
var sum = ["20.0","40.1","80.2","400.3"].reduce((pv,cv)=>{ return pv + (parseFloat(cv)||0); },0);
The reduce() is available in older ECMAScript versions, the arrow function is what makes this ES6-specific.
I'm passing in 0 as the first
pv
value, so I don't need parseFloat around it — it'll always hold the previous sum, which will always be numeric. Because the current value,cv
, can be non-numeric (NaN
), we use||0
on it to skip that value in the array. This is terrific if you want to break up a sentence and get the sum of the numbers in it. Here's a more detailed example:let num_of_fruits = ` This is a sentence where 1.25 values are oranges and 2.5 values are apples. How many fruits are there? `.split(/\s/g).reduce((p,c)=>p+(parseFloat(c)||0), 0); // num_of_fruits == 3.75
-
jQuery:
var arr = ["20.0","40.1","80.2","400.3"], sum = 0; $.each(arr,function(){sum+=parseFloat(this) || 0;});
What the above gets you:
- ability to input any kind of value into the array; number or numeric string(
123
or"123"
), floating point string or number ("123.4"
or123.4
), or even text (abc
) - only adds the valid numbers and/or numeric strings, neglecting any bare text (eg [1,'a','2'] sums to 3)
Solution 2:
You don't need jQuery. You can do this using a for
loop:
var total = 0;
for (var i = 0; i < someArray.length; i++) {
total += someArray[i] << 0;
}
Related:
- How to find the sum of an array of numbers
Solution 3:
You can use reduce
which works in all browser except IE8 and lower.
["20","40","80","400"].reduce(function(a, b) {
return parseInt(a, 10) + parseInt(b, 10);
})