我要做的是根据每个数组的长度从最高到最低重新排序多维数组。
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数组的结果。
答案 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]
。
在这种情况下它可能不那么有用(@ FelixLoether的答案要简单得多),但是如果你需要比.length
更复杂的计算,这种缓存和排序方式相当有效。