JS:根据每个子数组的长度对多维数组进行排序

时间:2012-01-02 19:10:03

标签: javascript jquery

我要做的是根据每个数组的长度从最高到最低重新排序多维数组。

var array0 = [9, 7, 1]    
var array1 = [2]
var array2 = [20, 3, 8, 11]
var array3 = [0, 6];

var multi = [array0, array1, array2, array3];

var multiLengths = [];

$(multi).each(function(i) { // for loop using jQuery
    multiLengths.push(this.length);
});
// multiLengths: 3,1,4,2

function sortDesc(a,b) { //sort in descending order
    return b - a;
}

multiLengths.sort(sortDesc);

// somehow re-order multi to be: [array2, array0, array3, array1]

那么我如何根据'multiLengths'的新排序顺序重新排序'multi'数组?这很困难,因为新订单是使用sort函数创建的,所以我无法真正索引sortedMulti数组的结果。

2 个答案:

答案 0 :(得分:5)

您可以直接在multi上使用排序:

multi.sort(function (a, b) {
    return b.length - a.length;
});

答案 1 :(得分:1)

$(multi).each(function(i) { // for loop using jQuery
    multiLengths.push([this.length, this]);
});

function sortDesc(a,b) { //sort in descending order
    return b[0] - a[0];
}

然后当您完成排序multiLengths时,只需将结果映射到元素[1]

在这种情况下它可能不那么有用(@ FelixLo​​ether的答案要简单得多),但是如果你需要比.length更复杂的计算,这种缓存和排序方式相当有效。