我有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中的每个值。
答案 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));
这将使第一个数组发生突变,如果需要不变性,则将其克隆。