snippetjavascriptCritical
How to find the sum of an array of numbers
Viewed 0 times
arraynumbershowfindthesum
Problem
Given an array
I thought
[1, 2, 3, 4], how can I find the sum of its elements? (In this case, the sum would be 10.)I thought
$.each might be useful, but I'm not sure how to implement it.Solution
Recommended (reduce with default value)
Array.prototype.reduce can be used to iterate through the array, adding the current element value to the sum of the previous element values.
Without default value
You get a TypeError
Prior to ES6's arrow functions
Non-number inputs
If non-numbers are possible inputs, you may want to handle that?
Speed Optimized
The reduce way is nice as it is easy to write and generally simple to understand, but if you are looking for speed (which is usually not a concern), use a simple for loop.
eval([1,2,3].join('+'))
)
//This way is dangerous if the array is built
// from user input as it may be exploited eg:
eval([1,"2;alert('Malicious code!')"].join('+'))`
Of course displaying an alert isn't the worst thing that could happen. The only reason I have included this is as an answer Ortund's question as I do not think it was clarified.
Array.prototype.reduce can be used to iterate through the array, adding the current element value to the sum of the previous element values.
console.log(
[1, 2, 3, 4].reduce((a, b) => a + b, 0)
)
console.log(
[].reduce((a, b) => a + b, 0)
)
Without default value
You get a TypeError
console.log(
[].reduce((a, b) => a + b)
)
Prior to ES6's arrow functions
console.log(
[1,2,3].reduce(function(acc, val) { return acc + val; }, 0)
)
console.log(
[].reduce(function(acc, val) { return acc + val; }, 0)
)
Non-number inputs
If non-numbers are possible inputs, you may want to handle that?
console.log(
["hi", 1, 2, "frog"].reduce((a, b) => a + b)
)
let numOr0 = n => isNaN(n) ? 0 : n
console.log(
["hi", 1, 2, "frog"].reduce((a, b) =>
numOr0(a) + numOr0(b))
)
Speed Optimized
The reduce way is nice as it is easy to write and generally simple to understand, but if you are looking for speed (which is usually not a concern), use a simple for loop.
const numbers = [1, 2, 3, 4];
let sum = 0;
for (let i = 0; i
Non-recommended dangerous eval use
We can use eval to execute a string representation of JavaScript code. Using the Array.prototype.join function to convert the array to a string, we change [1,2,3] into "1+2+3", which evaluates to 6.
console.log(eval([1,2,3].join('+'))
)
//This way is dangerous if the array is built
// from user input as it may be exploited eg:
eval([1,"2;alert('Malicious code!')"].join('+'))`
Of course displaying an alert isn't the worst thing that could happen. The only reason I have included this is as an answer Ortund's question as I do not think it was clarified.
Context
Stack Overflow Q#1230233, score: 1483
Revisions (0)
No revisions yet.