将[1,2]和[7,8]合并为[[1,7],[2,8]]的最有效方法是什么?

Sub*_*bbu 4 javascript

给定2个数组[1,2]和[7,8],合并形成[[1,7],[2,8]]的最有效方法是什么.我知道我们可以这样做:

a1 = [1,2], a2 = [7,8], a3=[];
for (var i=0; i<a1.length; i++) {
  a3.push([a1[i], a2[i]]);
}
Run Code Online (Sandbox Code Playgroud)

我正在处理一个大型阵列.所以我想看看是否有更好的方法.

Tra*_*s J 7

没有办法比O(n)更快地执行此操作,因为每个元素都必须触摸一次.


Lor*_*uer 5

这是个好问题!

首先,确保您a1,a2,a3通过关键字分配给本地范围var,您似乎忘记了。否则性能会受到极大影响。

至于代码性能比较。您可以在此处测试/查看结果:

拉链测试

纯 JavaScript:

var a1 = [1, 2],
  a2 = [7, 8],
  a3 = [];
for (var i = 0; i < a1.length; i++) {
  a3.push([a1[i], a2[i]]);
}
Run Code Online (Sandbox Code Playgroud)

JS/原生方法:

var a1 = [1, 2],
  a2 = [7, 8],
  a3 = [];
a3 = a1.map(function(e, i, a) {
  return [e, a2[i]]
})
Run Code Online (Sandbox Code Playgroud)

当然还有更多可能的实现,但重点是,正如 Travis J 所指出的,可能没有其他实现可以在O(n)时间内击败 for 循环和直接打包。

引擎/优化:通过Chrome v29 的V8 JavaScript 引擎