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));
我有一个很简单的问题,我正在学习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));