我正在寻找一种模式来获取每个第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核心库的库吗?
只需迭代你的数组:
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.
使用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)
这是尝试给出一个线索,所以我没有处理错误处理的事情.