給定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]]);
}
我正在處理一個大型數組。所以我想看看是否有更好的方法。
給定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]]);
}
我正在處理一個大型數組。所以我想看看是否有更好的方法。
沒有辦法做到這一點比O(n)更快,因爲每個元素都必須觸摸一次。
沒有,那就是它的效率。它在O(n)時間內運行。真的不多,你可以問。如果有什麼可以優化的,它會將a1轉換爲地圖,但這是對內存的優化,聽起來就像你想要加快速度。
你基本上是尋找相同Python的zip
功能的函數,因此檢查出的答案舊的SO問題:
這是一個很好的問題!
首先,確保您通過var
關鍵字將a1,a2,a3
分配給本地範圍,這似乎是您忘記的關鍵字。否則,性能會受到極大的影響。
至於代碼性能比較。您可以測試/看到的結果here:
純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引擎
AFAIK,你做得很好:) – sp00m 2012-04-24 07:17:08