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

时间:2012-04-24 07:15:34

标签: 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]]);
}

我正在处理一个大型数组。所以我想看看是否有更好的方法。

4 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

您基本上是在搜索与Python的zip函数相同的函数,因此请查看较旧的SO问题的答案:

Javascript equivalent of Python's zip function

答案 2 :(得分:1)

这是一个很好的问题!

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

至于代码性能比较。您可以测试/查看结果here

zip tests

纯JavaScript:

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

JS / Native方法:

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

当然还有更多可能的实现,但重点是可能没有其他实现可以击败for循环和直接打包,在 O(n) -time中,如Travis所指出的那样学家

引擎/优化:通过 Chrome v29

的V8 JavaScript引擎

答案 3 :(得分:0)

不,这就是它的效率。它在 O(n)时间内运行。你可以问的真的不多。如果有任何你可以优化的东西,那就是将a1转换为地图,但这是对内存的优化,听起来你想要加快速度。