如何对两个数组的值求和?

时间:2019-01-24 16:35:46

标签: javascript multidimensional-array google-apps-script google-sheets

我有2个看起来像这样的数组(数组2是多维的):

Array 1 = 
 [1795, 3449, 41, 1261, 99, 38162, 36, 7, 2768, 53, 1800]

Array 2 = 
 [[33, 0, 0, 433, 17, 2388, 0, 0, 0, 0, 0],
 [508, 0, 0, 242, 36, 800,  0, 0, 5, 0, 0],
 [285, 0, 0, 0,   0,  1600, 0, 0, 0, 0, 0], 
 [0,   0, 0, 0,   0,  1700, 0, 0, 0, 0, 0], 
 [0,   0, 0, 0,   0,  0,    0, 0, 0, 0, 0]]

数组的长度将始终相同。

我想做的是累积每个数组位置中的值,因此它们应如下所示:

[[1795, 3449, 41, 1261, 99,  38162, 36, 7, 2768]
[1828, 3449, 41, 1694, 116, 40550, 36, 7, 2768]
[2336, 3449, 41, 1936, 152, 41350, 36, 7, 2773]
[2621, 3449, 41, 1936, 152, 42950, 36, 7, 2773]
[2621, 3449, 41, 1936, 152, 44650, 36, 7, 2773]
[2621, 3449, 41, 1936, 152, 44650, 36, 7, 2773]]

最终数组将从上一行获取值,并向下累计值。

我尝试使用map和reduce,但是我认为因为数组2是多维的,而且我仍然是JS的新手,所以我无法使用它。任何帮助,将不胜感激。

这是我已经尝试过的:

var yearSums = array1.map(function (array1Map) {
    return [parseInt(array1Map) + parseInt(array2)]
})

这给了我这个

[1828.0, 3482.0, 74.0, 1294.0, 132.0, 38195.0, 69.0, 40.0, 2801.0, 86.0, 1833.0]

它的作用是将数组2(33)中的第一个元素添加到数组1中的每个值。

3 个答案:

答案 0 :(得分:2)

我们还可以使用Array.reduce获得相同的结果。

var arr1 = [1795, 3449, 41, 1261, 99, 38162, 36, 7, 2768, 53, 1800];
var arr2 = [
  [33, 0, 0, 433, 17, 2388, 0, 0, 0, 0, 0],
  [508, 0, 0, 242, 36, 800, 0, 0, 5, 0, 0],
  [285, 0, 0, 0, 0, 1600, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 1700, 0, 0, 0, 0, 0],
  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
];
var sumArr = arr2.reduce(
  function(acc, curr) {
    acc.push(
      acc[acc.length - 1].map(function(col, idx) {
        return col + curr[idx];
      })
    );
    return acc;
  },
  [arr1] //Initialize Array1 as a 2D array.
);
console.log(sumArr);

答案 1 :(得分:0)

仅适用于相同长度的数组。

您必须在每个数组内循环,以获取每个数组索引的值并将其求和。

更新

第一次没有得到您的期望。更新的脚本

var array1 = 
 [1795, 3449, 41, 1261, 99, 38162, 36, 7, 2768, 53, 1800]

var array2 = 
 [[33, 0, 0, 433, 17, 2388, 0, 0, 0, 0, 0],
 [508, 0, 0, 242, 36, 800,  0, 0, 5, 0, 0],
 [285, 0, 0, 0,   0,  1600, 0, 0, 0, 0, 0], 
 [0,   0, 0, 0,   0,  1700, 0, 0, 0, 0, 0], 
 [0,   0, 0, 0,   0,  0,    0, 0, 0, 0, 0]]

var summedArray = array2.map(arr => arr.map((subArr,i) => subArr +array1[i])) 

console.log(summedArray)

答案 2 :(得分:0)

在以嵌套方式映射嵌套数组(acc)时,使用第一个数组(我们称其为table)作为累加器:

 const result = table.map(row => row.map((value, index) => acc[index] += value));

这将使第一个数组发生突变,如果需要不变性,则将其克隆。