Javascript-单个表达式中数组的zip和sum变量数

Javascript-单个表达式中数组的zip和sum变量数,javascript,arrays,Javascript,Arrays,to展示了一种简洁的方法,可以获取任意数量的数组,并在一条语句中将它们“压缩”到一个合并的数组中 zip= rows=>rows[0].map((_,c)=>rows.map(row=>row[c])) 这个问题显示了一个类似的想法,但是在压缩条目时对条目进行求和 我想知道如何将这两种技术结合起来-因此给定未知数量的阵列: [ [1,2,3], [1,2,3], [1,2,3] ] 。。。结果是[3,6,9],即第一个元素和第二个元素的总和,依此类推。为简单起见

to展示了一种简洁的方法,可以获取任意数量的数组,并在一条语句中将它们“压缩”到一个合并的数组中

zip= rows=>rows[0].map((_,c)=>rows.map(row=>row[c]))
这个问题显示了一个类似的想法,但是在压缩条目时对条目进行求和

我想知道如何将这两种技术结合起来-因此给定未知数量的阵列:

[
  [1,2,3],
  [1,2,3],
  [1,2,3]
]

。。。结果是
[3,6,9]
,即第一个元素和第二个元素的总和,依此类推。为简单起见,假设每个数组包含相同数量的项。

首先转置数组,使列变为行,反之亦然。之后,只需调用
reduce
函数

为了简洁起见,代码的第一个版本主要是typescript。第二个版本是JavaScript

请注意,ES5
map
reduce
功能仅在IE9及更高版本上可用

var数=[[1,2,3],[1,2,3],[1,2,3]]
//打字稿
var colSums=numbers[0].map(函数(col,i){
返回数字.map((行)=>行[i]).reduce((a,b)=>a+b);
});
//JavaScript
/*var colSums=numbers[0]。映射(函数(col,i){
返回编号.map(函数(行){
返回行[i];
}).减少(功能a、b){
返回a+b;
});
});*/
document.getElementById(“col sums”).innerHTML=colSums

我想我有了它-这很有帮助-我们可以扩展原始的压缩方法,因此:

zip = rows => rows[0].map((_,c) => rows.map(row=>row[c]).reduce((a,b) => a+b,0))

无需地图,地图,减少,两张地图即可到达:


与其他答案类似,它不必如此复杂:

number=[[1,2,3]、[1,2,3]、[1,2,3];
var result=numbers[0]。映射(函数(_,i){
返回数字。减少(函数(上一行){
返回行[i]+上一行;
}, 0);
});

控制台日志(结果)看起来我们的想法是一样的-您的是ES5兼容的(从IE9开始提供map和reduce)抱歉,这只是要添加前两个,结果是[2,4,6]!
var m = [
  [1,2,3],
  [1,2,3],
  [1,2,3]
];

var total = m.map(function(arr, i) {
  var count = 0;
  return arr.map(function(el, idx) {
    return count += m[idx][i];
  })
}).pop()