如何根据JavaScript中的大小连接数组?

时间:2014-01-27 13:20:51

标签: javascript arrays concat

我有四个数组A,B.C和D.例如:

length of A is 1 
length of b is 4 
length of C is 1
length of D is 2.

var a = [1];
var b = [2,3,4,5];
var c = [6];
var d = [7,8];

我想根据较大的数组长度连接这四个数组,因此数组将按顺序排列:bdac

预期结果:

[2,3,4,5,7,8,1,6]
[2,3,4,5,1,6,7,8] //also valid, a and c are same length, so can be sorted this way too.

如何在JavaScript中找到较大到较低的数组并将它们从大到小连接起来?

3 个答案:

答案 0 :(得分:5)

使用sortconcat

这很简单
Array.prototype.concat.apply([], [a, b, c, d].sort(function (a, b) {
  return b.length - a.length;
}));

Array.prototype.concat.apply用于将子数组连接在一起。

答案 1 :(得分:4)

你可以用underscore完全清楚地做到这一点:

_.sortBy([a,b,c,d], function(num) { 
    return num.length; 
}).reverse().join(',').split(',');

答案 2 :(得分:2)

我的更详细,但似乎仍然有效;所有前3个答案中的想法是将数组放入一个额外的数组中,然后根据数组的长度自定义数组。一个好的,有点过时的参考文献是:http://www.javascriptkit.com/javatutors/arraysort.shtml

var arrays = [a, b, c, d];
var concatentation = [];

arrays.sort(function(x, y) {
    return y.length - x.length;    
});

for (var i=0, n=arrays.length; i<n; i++) {
    concatentation = concatentation.concat(arrays[i]);
}

console.log(concatentation); //[2, 3, 4, 5, 7, 8, 1, 6]