【发布时间】:2017-09-23 05:20:18
【问题描述】:
我有一个多维数组,我不知道它的大小,我所知道的是每个孩子都有相同的长度和相同的结构。
我需要将第一个孩子的内部数组与其兄弟的内部数组连接起来,以便所有具有相同索引的子内部数组都在一个数组中。
(如果有人想更好地表达它,或者改进标题,请做我的客人)
示例:
let arrays = [
//1
[[1, 2], [3, 4], [5, 6]],
//2
[[10, 20], [30, 40], [50, 60]],
//3
[[100, 200], [300, 400], [500, 600]],
//N
[[10000, 20000], [30000, 40000], [50000, 60000]],
];
预期结果:
[
[1, 2, 10, 20, 100, 200, 10000, 20000],
[3, 4, 30, 40, 300, 400, 30000, 40000],
[5, 6, 50, 60, 500, 600, 50000, 60000]
]
这是我目前正在做的事情,它正在工作,但它有点矫枉过正。
/**
* Helper function
* Will return all the values at ${index} of each array in ${arrays}
* Example: index(1, [[1,2], [3,4]]); //[2, 4]
*/
function index(index, arrays){
let results = [];
for(let i = 0, len = arrays.length; i < len; i++)
results.push(arrays[i][index]);
return results;
}
let first = arrays.shift();
let output = first.map((item, i) => item.concat( ...index(i, arrays) ))
我正在寻找一种更有效的方法来做到这一点,因为它在节点服务器中运行,而且也是一种更聪明的方法(不一定要更有效)。
注意:我使用的是node v7.8.0,所以可以使用ES6。
更新:
展开运算符比apply慢很多
所以我的代码这样更快:
return first.map((item, i) => [].concat.apply(item, index(i, clone) ));
JSPERF:
我测试了jsperf 中的所有答案,@ibrahimMahrir 的方式显然是最快的。
/**
* Will return all the values at ${index} of each array in ${arrays}
* Example: index(1, [[1,2], [3,4]]); //[2, 4]
*/
function index(index, arrays){
let results = [];
for(let i = 0, len = arrays.length; i < len; i++)
results.push(arrays[i][index]);
return results;
}
let arrays = [
//1
[[1, 2], [3, 4], [5, 6]],
//2
[[10, 20], [30, 40], [50, 60]],
//3
[[100, 200], [300, 400], [500, 600]],
//N
[[10000, 20000], [30000, 40000], [50000, 60000]],
];
let first = arrays.shift();
let output = first.map((item, i) => item.concat( ...index(i, arrays) ));
console.log(output);
【问题讨论】:
-
子数组的长度都一样吗?
-
@ibrahimmahrir 是的,他们有,唯一不同的是他们拥有的价值观。
标签: javascript arrays node.js performance multidimensional-array