Javascript - Sum two arrays in single iteration

后端 未结 13 1999
我寻月下人不归
我寻月下人不归 2020-11-29 05:56

I want to sum each value of an array of numbers with its corresponding value in a different array of numbers, and I want to do this without looping through each individual v

相关标签:
13条回答
  • 2020-11-29 06:16

    I know this is an old question but I was just discussing this with someone and we came up with another solution. You still need a loop but you can accomplish this with the Array.prototype.map().

    var array1 = [1,2,3,4];
    var array2 = [5,6,7,8];
    
    var sum = array1.map(function (num, idx) {
      return num + array2[idx];
    }); // [6,8,10,12]
    
    0 讨论(0)
  • 2020-11-29 06:20

    Just merge Popovich and twalters's answer.

    Array.prototype.SumArray = function (arr) {
    
            var sum = this.map(function (num, idx) {
              return num + arr[idx];
            });
    
            return sum;
        }
    var array1 = [1,2,3,4];
    var array2 = [5,6,7,8];
    var sum = array1.SumArray(array2);
    console.log(sum); // [6,8,10,12]
    
    0 讨论(0)
  • 2020-11-29 06:25

    Here is a generic solution for N arrays of possibly different lengths.

    It uses Array.prototype.reduce(), Array.prototype.map(), Math.max() and Array.from():

    function sumArrays(...arrays) {
      const n = arrays.reduce((max, xs) => Math.max(max, xs.length), 0);
      const result = Array.from({ length: n });
      return result.map((_, i) => arrays.map(xs => xs[i] || 0).reduce((sum, x) => sum + x, 0));
    }
    
    console.log(...sumArrays([0, 1, 2], [1, 2, 3, 4], [1, 2])); // 2 5 5 4

    0 讨论(0)
  • 2020-11-29 06:25

    Below example will work even with length variation and few more use cases. check out. you can do prototyping as well if you needed.

    function sumArray(a, b) {
          var c = [];
          for (var i = 0; i < Math.max(a.length, b.length); i++) {
            c.push((a[i] || 0) + (b[i] || 0));
          }
          return c;
    }
    
    // First Use Case.
    var a = [1, 2, 3, 4];
    var b = [1, 2, 3, 4];
    console.log( sumArray(a, b) );
    
    // Second Use Case with different Length.
    var a = [1, 2, 3, 4];
    var b = [1, 2, 3, 4, 5];
    console.log( sumArray(a, b) );
    
    // Third Use Case with undefined values and invalid length.
    var a = [1, 2, 3, 4];
    var b = [];
    b[1] = 2;
    b[3] = 4;
    b[9] = 9;
    console.log( sumArray(a, b) );

    0 讨论(0)
  • 2020-11-29 06:30

    Generic solution for N arrays of possibly different lengths using functional programming in one line ;)

    const sumArrays = as => as.filter(a => a.length).length ? [as.filter(a => a.length).reduce((r, a) => r + a.shift(), 0), ...sumArrays(as)] : []
    
    console.log(sumArrays([[1, 2, 3], [100], [11, 22, 33, 44], []]))
    
    0 讨论(0)
  • 2020-11-29 06:35

    You can't avoid the loop, but you can do this once and add a function to all Array objects using Array.prototype.

    Here's and example:

    // Add a SumArray method to all arrays by expanding the Array prototype(do this once in a general place)
    Array.prototype.SumArray = function (arr) {
        var sum = [];
        if (arr != null && this.length == arr.length) {
            for (var i = 0; i < arr.length; i++) {
                sum.push(this[i] + arr[i]);
            }
        }
    
        return sum;
    }
    
    // here's your code
    var array1 = [1, 2, 3, 4];
    var array2 = [5, 6, 7, 8];
    var sum = array1.SumArray(array2);
    console.log(sum); // [6,8,10,12]
    

    Here's your Fiddle.

    0 讨论(0)
提交回复
热议问题