对多维数组值求和并将它们存储在另一个数组中

时间:2019-04-04 16:16:09

标签: javascript arrays

我有一个二维数组,其结构如下:

enter image description here

我想对相对于它们的索引的值求和。 (-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]]

但是,这似乎输出以下内容:

enter image description here

如果有人可以将我推向正确的方向,那就太好了。

2 个答案:

答案 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;这是最好的方法。我只是想向您展示您要使用的选项