我有3个阵列说A,B,C A具有a1,a2,a3,类似于B和C的b1,b2,b3。
当我打印他们的元素时,他们就像这样来了
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 :(得分:3)
如果它们都具有相同的长度,你可以为它写一个循环:
var D = [];
for(var i = 0; i<A.length; i++){
D.push(A[i],B[i],C[i]);
}
return D;
答案 1 :(得分:1)
您要做的事情称为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"]]
<强>更新强>:
与上面相比,我发现了另一种更清洁的zip实现方式。请在此处查看:Javascript equivalent of Python's zip function
答案 2 :(得分:0)
首先,您需要将数组连接在一起:
var D = A.concat(B, C);
然后应用所需的排序:
D.sort(function(a, b) {
return // ...
});
如果您在没有参数的情况下致电sort()
,D
将按字母顺序排序。
答案 3 :(得分:0)
如果你只需要连接所有数组,你可以编写一个简单的辅助函数,它使用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