Search code examples
javascriptjqueryarrays

How to find the sum of an array of numbers


Given an array [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.

    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))
    )

    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.