Warum funktioniert die Sortierfunktion von Javascript nicht gut?

8

Dieses einfache Javascript

%Vor%

erzeugt die Ergebnisse: 11.17, 2.73, 3.12 anstelle von 2.73, 3.12, 11.17 .

Warum ist das und wie kann ich es beheben?

Vielen Dank im Voraus!

    
Christos Mitsis 23.05.2011, 06:59
quelle

4 Antworten

10

Es wird alphabetisch sortiert, indem Sie Ihre eigene Sortierfunktion übergeben:

%Vor%     
Tom 23.05.2011, 07:04
quelle
6

Standardmäßig sortiert Array.sort alphabetisch (lexographisch) ... aber Sie können Ihre eigene Funktion angeben. Probieren Sie:

%Vor%     
sje397 23.05.2011 07:03
quelle
2

Dazwischen sagen die vorhandenen Antworten alles aus, aber keiner von ihnen erwähnt beide Probleme in Ihrem Code. Hier ist die vollständige Antwort:

Die Sortierung funktioniert nicht, weil die Standardsortierung lexikalisch ist (d. h. die Arrayelemente werden in Zeichenfolgen konvertiert und alphabetisch verglichen). Sie können eine eigene Vergleichsfunktion für sort() bereitstellen:

%Vor%

Zweitens, for...in sagt Ihnen eigentlich nichts Konkretes darüber, ob Ihr Array korrekt sortiert ist, weil die Aufzählung von for...in nicht definiert ist (obwohl die meisten, aber nicht alle Browser weitgehend das tun, was Sie erwarten würden). Verwenden Sie stattdessen eine for -Schleife (wie Sie normalerweise für Arrays tun sollten):

%Vor%     
Tim Down 23.05.2011 08:34
quelle
1

Sie werden nicht richtig iteriert. Es sollte sein:

%Vor%

Wenn Sie for..in in Javascript verwenden, durchläuft dies die Eigenschaften des Objekts und die Reihenfolge der Iteration ist nicht definiert. Sie sollten auch einige seltsame Ausgaben sehen, so wie alle Funktionen, die in der Array-Klasse definiert sind.

    
Darin Dimitrov 23.05.2011 07:01
quelle

Tags und Links