我有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