我有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。
我有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。
如果你只需要連接所有的數組,你可以寫一個簡單的輔助功能,即利用了Array.prototype.reduce
和Array.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
你正在嘗試做一個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
寫一個自定義'排序'功能。 – Florent