2017-01-18 2 views
1

Ich habe folgende Funktion:Warum ist das Sortieren der Browser auf folgende Weise

var sortString = function (a, b) { 
      a = a.toLowerCase(); 
      b = b.toLowerCase(); 
      if (a < b) return 1; 
      if (a > b) return -1; 
      return 0; 
     } 

und ich habe folgende zwei Strings:

x = ["B1C3N_EUR_DFAK_ALL_3M_ALL","B1C3N_EUR_BPP_BCO_3M"]; 

Wenn ich die obige Funktion auf diesem Array laufen. Ich erwarte, dass "B1C3N_EUR_BPP_BCO_3M" den Index 0 hat, während der Browser es in umgekehrter Reihenfolge zurückgibt. Ich habe sowohl Chrome als auch IE überprüft. Wieso ist es so??

Muss ich "-" durch andere Werte ersetzen? Gibt es einen Weg, wie ich es ohne Ersatz tun kann?

+0

Das muss ein Witz sein? – Teemu

+0

Nein. Das ist kein Witz. Ich habe fast eine Stunde damit verbracht, herauszufinden, wie ich es sortieren könnte. Auch wenn ich "_" mit der Zeichenfolge ersetze, führt dies immer noch zu einer falschen Sortierung. Die Rückgabe von 1 und -1 war ein Fehler an meinem Ende beim Posten der Frage, aber selbst damit korrigierte ich das Problem –

+0

Nein, du hast deinen Code durcheinander gebracht (vielleicht Caching?), [Was gut funktioniert] (https: //jsfiddle.net/gf42v861/), wenn die Stelle des Minusoperators gewechselt wird. – Teemu

Antwort

2

Sie geben im Callback für Array#sort den falschen Wert für kleinere und größere Werte zurück.

if (a < b) return 1; 
//    ^should be -1, because a is smaller than b 

if (a > b) return -1; 
//    ^^ should be 1, because a is greater than b 

Für einen prägnanten Stil, könnten Sie verwenden, die die angegebenen Zeichenfolgen zu testen und einen Wert im gewünschten Bereich zurückkehrt.

+2

Die Verwendung von 'localeCompare' wäre auch gut:' return a.toLowerCase(). LocaleCompare (b.toLowerCase()); ' –

Verwandte Themen