如何求2维矩阵(m×n)中每行和每列的和。
[
[1, 2, 3],
[3, 2, 1]
]我知道在一维数组中,我们可以这样做:
var sum = [5, 6, 3].reduce(add, 0);
function add(a, b) {
return a + b;
}
console.log(sum);发布于 2016-08-02 21:45:40
使用ECMAScript6,您可以执行以下操作:
var matrix = [
[ 1, 2, 3 ],
[ 7, 2, 6 ]
];
// sums of rows
var rowSum = matrix.map(r => r.reduce((a, b) => a + b));
// sums of columns
var colSum = matrix.reduce((a, b) => a.map((x, i) => x + b[i]));
console.log(rowSum);
console.log(colSum);
行的总和很容易说明。让我们考虑一个3x3矩阵,它在这里更容易格式化:
[ 1 2 3 ] -- reduce --> 6 \
[ 7 2 6 ] -- reduce --> 15 } -- map --> [ 6, 15, 7 ]
[ 4 1 2 ] -- reduce --> 7 /列的总和就不那么微不足道了。我们通过一次“映射”2行来“减少”:
[ 1 2 3 ] [ 8 4 9 ]
+ [ 7 2 6 ] -- reduce --> + [ 4 1 2 ]
--------- ---------
map = [ 8 4 9 ] map = [ 12 5 11 ]发布于 2016-08-02 21:40:54
下面的代码显示了两个使用map的示例
第一个是水平地对二维数组求和。
var array = [ [1,2,3], [3,2,1] ];
var sum= array.map( function(row){
return row.reduce(function(a,b){ return a + b; }, 0);
});第二个是对2D数组进行垂直求和。
var array = [ [1,2,3], [3,2,1] ];
var sum2= array.map(function(row, i) {
return array.map(function(row) {
return row[i]; }
).reduce(function(a, b) {
return a+b;
}, 0);
});检查工作example
https://stackoverflow.com/questions/38720885
复制相似问题