SUM 数组中的特定列(Javascript)

SUM certain column in an array (Javscript)

我有一个很简单的问题,我正在学习javascript。

我有这个二维数组:-

let text = [[1,a],[2,b]]

我想对数组的数值求和,我知道如何使用 for 循环来完成,但是有什么方法可以像我们可以使用一维数组那样使用 reduce 以更短的方式完成?

如果我有这个数组:-

let text = [1,2]

我可以很容易地把它总结成一行:-

text.reduce((a,b) =>  a + b)

有没有办法对二维数组做同样的事情,它也有字符串值。

谢谢

您可以使用相同的 Array.prototype.reduce() 稍作修改来构建自定义汇总函数,该函数可以接受源数组和 col 指示目标列的变量:

const src = [[1,'a'],[2,'b']]

const sumByCol = (arr, col) => 
  arr.reduce((acc, row) => acc + row[col], 0)
  
console.log(sumByCol(src,0))

您可以执行以下操作

let text = [[1,'a'],[2,'b']]
let numbers_only = text.flat().filter(x => Number(x))
let sum = numbers_only.reduce((a,b) => a + b)

//answer = 3

作为 one-liner -

   let sum = text.flat().filter(x => Number(x)).reduce((a,b) => a + b)

你可以通过这样做在一行中实现它 :

let text = [[1,'a'],[2,'b']]

console.log(
  text.flat()
  .filter((item) => typeof item === 'number')
  .reduce((total, item) => total + item)
)

Yevgen Gorbunkov 的答案略有不同。

const src = [[1, 'a', 4], [2, 'b', 5], [3, 'c', 6]];

const sum_by_col = (arr, col) =>
  arr
    .map((row) => row[col]) // pull column into new array
    .reduce((a, b) => a + b); // reduce as normal

console.log(sum_by_col(src, 0));
console.log(sum_by_col(src, 2));