代码之家  ›  专栏  ›  技术社区  ›  Yash Jain

添加n个数组的值

  •  1
  • Yash Jain  · 技术社区  · 7 年前

    我有一个包含值的数组,它看起来像这样

    var values = [[23,45,12,67],[26,35,65,23],[45,73,12,54],[32,45,65,86]];
    

    我想添加里面所有的数组 values 像这样的变量

    sum = [126,198,154,230]
    

    126=23+26+45+32

    198=45+35+73+45

    我用 Array.prototype.map() 但也许我没有得到完美的逻辑来做到这一点,所以需要帮助。如何添加n个数组的值。

    5 回复  |  直到 7 年前
        1
  •  4
  •   Nina Scholz    7 年前

    对,可以映射单个值的总和,但也需要减少数组。

    var values = [[23, 45, 12, 67], [26, 35, 65, 23], [45, 73, 12, 54], [32, 45, 65, 86]],
        result = values.reduce((a, b) => a.map((v, i) => v + b[i]));
        
    console.log(result);
        2
  •  0
  •   Hassan Imam Ravi kant    7 年前

    你可以用 array#reduce 具有 array#forEach . 迭代数组,对于数组中的每个数组,在新数组中求和其值,并根据索引将其他数组添加到结果中。

    var values = [[23,45,12,67],[26,35,65,23],[45,73,12,54],[32,45,65,86]],
        result = values.reduce((r,a) => {
          a.forEach((v,i) => r[i] = (r[i] || 0) + v);
          return r;
        }); 
    console.log(result);
        3
  •  0
  •   Kasabucki Alexandr    7 年前

    我的解决方案是:

    const values = [[23,45,12,67],[26,35,65,23],[45,73,12,54],[32,45,65,86]];
    
    const res = values.reduce((curr, next) => {
    
      let length = curr.length;
      for(let i = 0; i < length; i++) {
        curr[i] += next[i]
      }
      return curr;
    });
    
    console.log(res);
        4
  •  0
  •   Abhishek Pandey    7 年前

    你的代码是这样的,

    var sum;
    var values = [[23,45,12,67],[26,35,65,23],[45,73,12,54],[32,45,65,86]];
    values.forEach(myFunction);
    
    function myFunction(item, index) {
         item..forEach(ArraySum)
    }
    
    function ArraySum(item, index) {
         sum=sum+item;
    }
    
        5
  •  0
  •   Yosvel Quintero    7 年前

    你可以用 Array.prototype.map() 结合 Array.prototype.reduce()

    代码示例:

    const values = [[23, 45, 12, 67], [26, 35, 65, 23], [45, 73, 12, 54], [32, 45, 65, 86]];
    const result = values.map((v, index, array) => v.reduce((a, c, i) => a + array[i][index], 0));
        
    console.log(result);