按特定顺序打印阵列

时间:2013-11-25 10:17:02

标签: javascript

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

4 个答案:

答案 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.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上的example

相关问题