2013-11-25 49 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