数组数组的"列总数"的模式

Roy*_*ins 8 javascript arrays

我正在寻找一种模式来获取每个第n项数组的总数.从概念上讲,这就像获取数据表的列总数一样.

var dataRows = [
  [10, 11, 12, 13],
  [20, 21, 22, 23],
  [30, 31, 32, 33]
]
// The outcome should be:
// [ 60, 63, 66, 69]
Run Code Online (Sandbox Code Playgroud)

我在服务器端有一些等效的Python代码,但决定它应该在客户端处理,因此在javascript中.这是等效的Python代码:

[sum(i) for i in zip(*data_rows)]
Run Code Online (Sandbox Code Playgroud)

你会怎么写这个?我确信代码会更长,没有zip,解包和列表理解,但它可以优雅地完成吗?还有扩展JS核心库的库吗?

Cer*_*rus 7

只需迭代你的数组:

var dataRows = [
  [10, 11, 12, 13],
  [20, 21, 22, 23],
  [30, 31, 32, 33]
]

var result = [];

for(var i = 0; i < dataRows.length; i++){
    for(var j = 0; j < dataRows[i].length; j++){
        result[j] = (result[j] || 0) + dataRows[i][j];
    } // ^ Add the current value to the proper position of `result`.
}

alert(JSON.stringify(result));
Run Code Online (Sandbox Code Playgroud)

至于你问题的第二部分:
有些库为JS添加了很多数组操作函数.例如,看看Underscore.


Leo*_*Leo 6

使用ES5阵列方法:

var dataRows = [
  [10, 11, 12, 13],
  [20, 21, 22, 23],
  [30, 31, 32, 33]
];

dataRows.reduce(function(a, b) {
  return a.map(function(el, i) {
    return el + b[i];
  });
});
// [60, 63, 66, 69]
Run Code Online (Sandbox Code Playgroud)

这是尝试给出一个线索,所以我没有处理错误处理的事情.