2012-05-16 193 views
3

這是基於我最後一個問題。將2個數組合併成一個多維數組?

我有這些陣列:

var array1 = new Array ("Pepsi", "Coke", "Juice", "Water"); 
var array2 = new Array ("35", "17", "21", "99"); 

我想將它們結合起來,形成一個多維數組是這樣的:

[ 
    ["Pepsi","35"] 
    ["Coke", "17"] 
    ["Juice","21"] 
    ["Water","99"] 
] 

我想這個腳本:

Values=[]; 

for (i = 0; i < array1.length; i++) { 
    Values[i] = Array(array1[i], array2[i]); 
} 

但它給出了這樣的結果(正確的值,不正確的名稱):

[ 
    ["a","35"] 
    ["c","17"] 
    ["E","21"] 
    ["I","99"] 
] 
+4

[**你有什麼對我的作品**](http://jsfiddle.net/VdRyr/) – qwertymk

+2

你代碼是[正確](http://jsfiddle.net/xd7Bf/),至少在Firefox和Opera上... –

+0

大寫E和我來自哪裏,還是那些拼寫錯誤? – Yatrix

回答

14
var array1 = ["Pepsi", "Coke", "Juice", "Water"], 
    array2 = ["35", "17", "21", "99"], 
    result = [], i = -1; 

while (array1[++i]) { 
    result.push([ array1[i], array2[i] ]); 
} 

書面,這種解決方案假定你將永遠只能是使用字符串。正如@ ajax333221在下面的評論中指出的那樣,如果您將booleanint值包含到此解決方案中,則會導致問題。因此,我想建議,將實現你的目標的改善,而不是絆倒難值和類型:

var array1 = [false, 0, "Juice", -1], 
    array2 = ["35", "17", "21", "99"], 
    result = []; 

for (var i = 0; i < array1.length; i++) { 
    result.push([ array1[i], array2[i] ]); 
} 
+1

工作完美!!!!!!!!!!!!!!!! – supercoolville

+1

你認爲他會一直使用字符串。如果他與數字'0'或布爾值'false'等其他東西一起工作,將會出現問題 – ajax333221

+0

@ ajax333221是的,我假設問題代表了問題。 – Sampson

4

您可以在陣列,可以使用.map()

var Values = array1.map(function(v,i) { 
    return [v, array2[i]]; 
}); 

舊版本瀏覽器查看MDN shim

現場演示:http://jsfiddle.net/D9rjf/


如果你打算做這個操作相當多,你可以做一個可重複使用的功能。

在這個例子中,我擴展了Array.prototype,但如果你不喜歡這個,那就沒有必要了。

Array.prototype.combine = function(arr) { 
    return this.map(function(v,i) { 
     return [v, arr[i]]; 
    }); 
}; 

var Values = array1.combine(array2); 

現場演示:http://jsfiddle.net/D9rjf/1/

+0

沒有足夠的答案像這樣使用非破壞性方法創建數組 – Larry

相關問題