wake-up-neo.com

Wie sortiere ich ein Array nach der Länge jedes Elements?

Ich habe ein Array wie dieses: 

arr = []
arr[0] = "ab"
arr[1] = "abcdefgh"
arr[2] = "abcd"

Nach dem Sortieren sollte das Ausgabearray sein:

arr[0] = "abcdefgh"
arr[1] = "abcd"
arr[2] = "ab"  

Ich meine, ich möchte in absteigender Reihenfolge der Länge jedes Elements.

70
ramesh kumar

Sie können die Methode Array.sort verwenden, um das Array zu sortieren. Eine Sortierfunktion, die die Länge der Zeichenfolge als Sortierkriterium berücksichtigt, kann wie folgt verwendet werden:

arr.sort(function(a, b){
  // ASC  -> a.length - b.length
  // DESC -> b.length - a.length
  return b.length - a.length;
});

Hinweis: Beim Sortieren von ["a", "b", "c"] nach Länge der Zeichenfolge wird nicht garantiert, dass ["a", "b", "c"] zurückgegeben wird. Nach den Angaben :

Die Sortierung ist nicht notwendigerweise stabil (dh Elemente, die Gleich vergleichen, bleiben nicht notwendigerweise in ihrer ursprünglichen Reihenfolge).

Wenn das Ziel darin besteht, nach Länge zu sortieren, dann nach Wörterbuchreihenfolge, müssen Sie zusätzliche Kriterien angeben:

["c", "a", "b"].sort(function(a, b) {
  return a.length - b.length || // sort by length, if equal then
         a.localeCompare(b);    // sort by dictionary order
});
175
Salman A

Hier ist die Sortierung, abhängig von der Länge einer Zeichenfolge mit Javascript, wie Sie gefragt haben:

[die Lösung des Problems durch Blasensortierung] [1]

[1]: http://jsfiddle.net/sssonline2/vcme3/2/enter code here

3
shareef

Wir können die Methode Array.sort verwenden, um dieses Array zu sortieren.

ES5-Lösung

var array = ["ab", "abcdefgh", "abcd"];

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

console.log(JSON.stringify(array, null, '\t'));

Für aufsteigend Sortierreihenfolge: a.length - b.length

Für descending Sortierreihenfolge: b.length - a.length

ES6-Lösung

Achtung: Nicht alle Browser können ES6-Code verstehen!

In ES6 können wir einen Pfeil-Funktionsausdruck verwenden.

let array = ["ab", "abcdefgh", "abcd"];

array.sort((a, b) => b.length - a.length);

console.log(JSON.stringify(array, null, '\t'));

2
Bharata

Basierend auf Salmans Antwort habe ich eine kleine Funktion geschrieben, um sie einzukapseln: 

function sortArrayByLength(arr, ascYN) {
        arr.sort(function (a, b) {           // sort array by length of text
            if (ascYN) return a.length - b.length;              // ASC -> a - b
            else return b.length - a.length;                    // DESC -> b - a
        });
    }

dann ruf es einfach mit an

sortArrayByLength( myArray, true );

Beachten Sie, dass Funktionen leider nicht zum Array-Prototyp hinzugefügt werden können/sollen, wie auf dieser Seite erläutert.

Außerdem hat es das als Parameter übergebene Array geändert und gibt nichts zurück. Dies würde die Duplizierung des Arrays erzwingen und wäre für große Arrays nicht ideal. Wenn jemand eine bessere Idee hat, bitte kommentieren!

0
Nico

Ich habe die Antwort von @ shareef angepasst, um sie kurz zu fassen. Ich benutze,

.sort(function(arg1, arg2) { return arg1.length - arg2.length })

0
user3054109