2012-04-24 43 views
4

給定2個數組[1,2]和[7,8]將其合併爲[[1,7],[2,8]]的最有效方式是什麼?我知道我們可以做到這一點:將[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]]); 
} 

我正在處理一個大型數組。所以我想看看是否有更好的方法。

+3

AFAIK,你做得很好:) – sp00m 2012-04-24 07:17:08

回答

7

沒有辦法做到這一點比O(n)更快,因爲每個元素都必須觸摸一次。

0

沒有,那就是它的效率。它在O(n)時間內運行。真的不多,你可以問。如果有什麼可以優化的,它會將a1轉換爲地圖,但這是對內存的優化,聽起來就像你想要加快速度。

1

這是一個很好的問題!

首先,確保您通過var關鍵字將a1,a2,a3分配給本地範圍,這似乎是您忘記的關鍵字。否則,性能會受到極大的影響。

至於代碼性能比較。您可以測試/看到的結果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 /本地方法:

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

當然也有更多的可能實現,但重點是p robably沒有其他實現可以擊敗一個for循環和直接包裝,在O(n)的 -time如麻煩由特拉維斯J.指出

引擎/優化:通過鉻V29 V8 JavaScript引擎