2 Stimmen

JS: Sortieren eines mehrdimensionalen Arrays basierend auf der Länge der einzelnen Unterarrays

Ich versuche, das mehrdimensionale Array auf der Grundlage der Längen der einzelnen Arrays von oben nach unten neu zu ordnen.

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]

Wie würde ich also das Array "multi" basierend auf der neuen sortierten Reihenfolge von "multiLengths" neu anordnen? Es ist schwierig, weil die neue Reihenfolge mit der Sortierfunktion erstellt wird, so kann ich nicht wirklich die Ergebnisse des Arrays sortedMulti indizieren.

5voto

Felix Loether Punkte 5842

Sie können einfach sortieren auf multi direkt:

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

1voto

Amadan Punkte 177506
$(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];
}

und dann, wenn Sie mit dem Sortieren fertig sind multiLengths wird das Ergebnis einfach auf das Element [1] .

Sie ist in diesem Zusammenhang wahrscheinlich nicht so nützlich (@FelixLoethers Antwort ist viel einfacher), aber falls Sie eine komplexere Berechnung als .length Diese Art der Zwischenspeicherung und Sortierung ist recht effizient.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X