2013-11-25 44 views
2

我有3個陣列說A,B,C A具有A1,A2,A3同樣B1,B2,B3爲B和C.陣列以特定的順序進行打印

當我打印他們的元件,他們來這樣

return(A)-->a1,a2,a3 
return(B)-->b1,b2,b3 
return(C)-->c1,c2,c3 

我怎麼能操縱這些陣列到另一個陣列說d打印這樣的事情

return(D)--> 
a1,b1,c1,a2,b2,c2,a3,b3,c3 

我使用JavaScript。

+0

寫一個自定義'排序'功能。 – Florent

回答

0

首先,你需要數組Concat的在一起:

var D = A.concat(B, C); 

然後應用所需的排序:

D.sort(function(a, b) { 
    return // ... 
}); 

如果調用sort()沒有參數,D將按照字母順序排序。

+0

包含數字部分> 10的值如何? – C5H8NNaO4

+0

我猜'a1','a2','aN'是虛擬值......如果有真值,編寫排序函數並不複雜。 – Florent

3

你可以寫一個循環,如果他們都具有相同的長度是這樣的:

var D = []; 

for(var i = 0; i<A.length; i++){ 
    D.push(A[i],B[i],C[i]); 
} 

return D; 
+0

如果他在每個陣列中有可變數量的元素,它會怎麼做? – redV

+0

你只想要所有數組都有的索引,或者像a1,b1,c1,a2,b2,c3,b3,c3那樣在最後連接較長的數組? – Igle

+0

我的問題是,如果A有a1,a2,B有b1,b2,b3,b4。 – redV

0

如果你只需要連接所有的數組,你可以寫一個簡單的輔助功能,即利用了Array.prototype.reduceArray.prototype.concat

function concatAll() { 
    return [].reduce.call (arguments, function (a,b) {return a.concat (b)},[]) 
} 

要使用它,只需用你想連接所有陣列調用它。

var a = ["a1", "a2", "a3"], 
    b = ["b1", "b2", "b3"], 
    c = ["c1", "c2", "c3"]; 

concatAll (a,b,c) //["a1", "a2", "a3", "b1", "b2", "b3", "c1", "c2", "c3"] 

如果需要之後也給你數組進行排序,Array.prototype.sort需要一個功能參數,你可以用你的數值後先進行排序,通過把重量就可以了。

concatAll (a,b,c).sort(function (a, b) { 
    var aVals = a.match(/(\D*)(\d*)/), 
     bVals = b.match(/(\D*)(\d*)/), 
     weighted = [a[0] > b[0] ? 1 : a[0] < b[0] ? -1 : 0, b[1] - a[1]] //[string,number] 

    return weighted[0] - 2 * weighted[1] // give the number a double weight 

}) //["a1", "b1", "c1", "a2", "b2", "c2", "a3", "b3", "c3"] 

繼承人上的jsfiddle

+0

做這個工作..?你的小提琴.. – rahul888

+0

@ rahul888對我來說,它確實,你打開了你的控制檯嗎?或者只是將上面的代碼粘貼到控制檯中 – C5H8NNaO4

+0

@ rahul888將小提琴更新爲將數組的字符串表示附加到主體 – C5H8NNaO4

1

你正在嘗試做一個example被稱爲zip operation。 Javascript默認沒有zip。我寫了一個小的zip函數,它可能適用於你,它期望的是所有的數組都有相同的長度。爲了更精確一些,它會希望所有的數組至少具有元素#1中的元素數量。這實質上是@Igle的代碼所做的,除了它使用了一些不同的方法並且可以使用任意數量的數組。

注意:您可能需要做一些錯誤的在下面的代碼

var zip = function (array) { 
    return array.slice(1).reduce(function(prev,cur) { 
     return prev.map(function(x,i){ 
      return x.concat(cur[i]); 
     }); 
    }, array[0].map(function(x){return [x];})); 
} 

zip ([ ['a1','a2','a3'] , ['b1','b2','b3'], ['c1','c2','c3'] ]); 

輸出檢查:

[["a1","b1","c1"],["a2","b2","c2"],["a3","b3","c3"]] 

UPDATE

我發現了另一個更清潔與上面相比,zip的實現。看看這裏:Javascript equivalent of Python's zip function