如何添加嵌套数组中的元素?

时间:2021-05-19 13:41:22

标签: javascript

let array = [[1,4], [11], [3,5,7]];

console.log(0+array[0]+array[1]+array[2]);
console.log(array.reduce((acc, value)=>acc+value, 0));

这会在控制台上打印以下内容:

01,4113,5,7  
01,4113,5,7

我试图添加数组的所有元素并偶然发现了上面的代码。我知道展开运算符以及如何添加所有元素。我知道这里发生的是串联而不是加法。我只是无法理解这个输出。有人能告诉我这里发生了什么吗?

3 个答案:

答案 0 :(得分:0)

let array = [[1,4], [11], [3,5,7]];
console.log(array.reduce((acc, value)=>acc+value, 0));

这里,每个 acc 都是一个数组,因此(如注释中所述)该数组将被转换为字符串(+)并且 js 将用逗号将其内爆。

要获得所有嵌套数组的总和,您需要在添加之前计算更深数组的总和:

使用新的 flat() 的示例;

let array = [[1,4], [11], [3,5,7]];
let sum = array.flat().reduce((acc,value)=> acc + value)
console.log(sum);

使用嵌套 reduce 的示例:

let array = [[1,4], [11], [3,5,7]];
console.log(array.reduce((acc, value)=> acc + value.reduce((a, b) => a + b, 0), 0));
// 1+4+11+3+5+7
// 31


还有很多其他选项可以得到想要的结果,使用新的 flat() 或者可以在这里找到递归函数;

答案 1 :(得分:0)

在外循环中遍历每个子数组,并在内循环中添加每个子数组的每个数字。

let twoDArray = [
  [1, 4],
  [11],
  [3, 5, 7]
];

const sumOfArrays = array => {
  let sum = 0;
  for (let arr of array) {
    for (let num of arr) {
      sum += num;
    }
  }
  return sum;
}

console.log(sumOfArrays(twoDArray));

答案 2 :(得分:-1)

长话短说,“reduce()”基本上执行一个循环。不是在您的代码中使用实际的手写循环,而是通过在 JavaScript 解释器本身内进行编程,在一次高效的操作中完成工作。

Here is an older StackOverflow post 其中包含一些漂亮的图形来解释“映射”和“减少”的过程。