2016-06-23 80 views
2

我有兩個數組數組,其中第一個包含位置名稱,第二個包含位置緯度和經度值。每個數組中的每一項對應於它的對手在其他和兩個數組有相同數量的項目,像這樣:JavaScript - 按項目組合兩個數組

var arr1 = [['Location #1'],['Location #2']]; 
var arr2 = [['36.1978319','-83.02365759999999'],['38.679842','-121.7457402']]; 

我需要的是兩個項目集合的組合排列,但不能連接在一起,像這樣:

var arr3 = [['Location #1','36.1978319','-83.02365759999999'], 
      ['Location #2','38.679842','-121.7457402']]; 

我能想到這樣做會與像組合爲循環的,但我不能得到正確的語法和不知道這甚至有可能......這樣的事情的唯一途徑

for ((var a = 0; a < arr1.length; a++) && (var b = 0; b < arr2.length; b++)) { 
    arr3.push(arr1[a] + ',' + arr2[b]); 
} 

有沒有一種方法可以用純javascript來解決這個問題?

+0

爲Arr1.length運行循環,因爲最終的arr3長度將與arr1並加入arr1和arr2的每個元素,這會得到預期的結果 –

+0

是否有任何特殊原因讓你將這一切都放在索引數組中?您可能會考慮將位置存儲爲位置和座標的鍵/值的常規對象。{}它將在語義上更有意義。 – skyline3000

+0

@ skyline3000 - 我無法控制如何返回地理編碼的位置項目,否則我會絕對使用對象。你是對的,那就是要走的路。 – Lars

回答

7

我建議Array.map其急促:

var arr1 = [['Location #1'], ['Location #2']]; 
 
var arr2 = [['36.1978319', '-83.02365759999999'], ['38.679842', '-121.7457402']]; 
 

 
var combined = arr1.map((element, i) => element.concat(arr2[i])); 
 

 
console.log(combined);

對於一個更通用的解決方案(混合陣列的任意數字),是指Javascript equivalent of Python's zip function

+0

@le_m這工作很好!榮譽......並感謝你的這個完美的最小解決方案 – Lars

3

如果兩個數組的長度確實相等,並且對應索引。這就是你需要的全部:

for (var a = 0; a < arr1.length; a++) { 
    arr3.push(arr1[a] + ',' + arr2[a]); 
} 
1

你正試圖結合for循環內的2個contours :)。

你想這樣做:

var resultArray = new Array(); 
for (var i = 0; i < arr1.length; i++) { 
    resultArray.push([arr1[i], arr2[i][0], arr2[i][1]]); 
}