我有一个二维数组,其结构如下:
我想对相对于它们的索引的值求和。 (-10000 + 100 + 100 + -100)。然后将它们存储在一个单独的数组中,如下所示:
checkItemExpiry: function(expireTimestamp) {
let startTime = expireTimestamp;
let clockInterval = setInterval(() => {
let currentTime = (new Date()).getTime() / 1000;
this.convertTime((startTime-currentTime))
}, 1000);
},
我想我必须使用map并化简才能实现这一目标,但是我运气不高。
这是我目前拥有的:
[[500], [-10100], [9000], [18000], [18000]]
但是,这似乎输出以下内容:
如果有人可以将我推向正确的方向,那就太好了。
答案 0 :(得分:5)
使用Array.prototype.map()和Array.prototype.reduce():
const arrays = [
[500],
[-10000, 100, 100, -100],
[9000],
[9000, 9000],
[9000, 9000]
];
const result = arrays.map(xs => xs.reduce((sum, x) => sum + x, 0));
console.log(JSON.stringify(result));
如果要将每个总和包含在数组中,只需将其放在方括号中:
const arrays = [
[500],
[-10000, 100, 100, -100],
[9000],
[9000, 9000],
[9000, 9000]
];
const result = arrays.map(xs => [xs.reduce((sum, x) => sum + x, 0)]);
console.log(JSON.stringify(result));
答案 1 :(得分:1)
我的建议是遵循jo_va approach:声明性和简单性要强得多。
话虽如此,如果您想使用for循环,这是您的更正版本
const arrays = [
[500],
[-10000, 100, 100, -100],
[9000],
[9000, 9000],
[9000, 9000]
];
let results = [];
for (var i = 0 ; i < arrays.length; i++) {
let sum = 0;
for (var z = 0; z < arrays[i].length; z++) {
sum += arrays[i][z]
}
results.push(sum);
}
console.log(results);
您可以看到结果是相同的,但是比较起来
您的问题是您要更新数组并对其进行迭代,从而导致迭代中断。您也没有正确访问阵列。
如果您需要返回结果数组,最好在其中创建一个新结果并将其推送。
再次考虑使用map + reduce;这是最好的方法。我只是想向您展示您要使用的选项