Sanjoy: Javascript Fehler in eigener Sortierfunktion

Hallo liebe Helfer,

ich habe im Netz folgende Sortierfunktion gefunden:

values = values.sort(stringComparison);
function stringComparison(a, b)
{
 a = a.toLowerCase();
 a = a.replace(/ä/g,"a");
 a = a.replace(/ö/g,"o");
 a = a.replace(/ü/g,"u");
 a = a.replace(/ß/g,"s");

b = b.toLowerCase();
 b = b.replace(/ä/g,"a");
 b = b.replace(/ö/g,"o");
 b = b.replace(/ü/g,"u");
 b = b.replace(/ß/g,"s");

return(a==b)?0:(a>b)?1:-1; // Fehlerverursachende Zeile
}

Diese funktioniert fast immer gut. Sporadisch führt sie im Internet Explorer zu einem Fehler - den ich noch nicht nachvollziehen kann. Deswegen hoffe ich auf eure Hilfe!
Die Fehlerkonsole meldet einen Fehler der Zeile "return(a==b)?0:(a>b)?1:-1;" und zwar "Fehler: Zahl erwartet". Was steckt inhaltlich hinter dieser Fehlermeldung. Verstehe nicht ganz, wieso überhaupt Strings mit > verglichen werden können. Und wieso erwartet er dann eine Zahl?

?! Vielen Dank und lieben Gruß
sanjoy

  1. Lieber Sanjoy,

    probiere einmal den alternativ-Wert komplett zu klammern:

        return (a==b) ? 0 : (  
             (a > b) ? 1 : -1  
        );
    

    Ich hoffe, dass Dir das hilft.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Lieber Sanjoy,

      probiere einmal den alternativ-Wert komplett zu klammern:

      return (a==b) ? 0 : (

      (a > b) ? 1 : -1
          );

      
      >   
      > Ich hoffe, dass Dir das hilft.  
      >   
      > Liebe Grüße aus [Ellwangen](http://www.ellwangen.de/),  
      >   
      > Felix Riesterer.  
        
      Vielen Dank für deine Hilfe Felix,  
        
      leider bekomme ich die Fehlermeldung immer noch. Habe den Code wie folgt geändert und somit die Fehlermeldung auf folgende Zeile "beschränkt":  
      ~~~javascript
        
      if (a==b)  
      {  
        return 0;  
      }  
      else if (a>b) //fehlerverursachende Zeile  
      {  
        return 1;  
      }  
      else  
      {  
        return -1;  
      }
      

      Vor allem führt tritt der Fehler nur sporadisch auf...

      Liebe Grüße
      Sanjoy

      1. Lieber Sanjoy,

        else if (a>b) //fehlerverursachende Zeile

        und wenn Du anstatt "a>b" einfach http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_int@title=parseInt(a) > parseInt(b) schreibst? Also in etwa so:

            return (a == b) ? 0 : (  
                 (parseInt(a) > parseInt(b)) ? 1 : -1  
            );
        

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. und wenn Du anstatt "a>b" einfach http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_int@title=parseInt(a) > parseInt(b) schreibst?

          Das dürfte zu falschen Ergebnissen führen, da er strings vergleichen möchte.
          Ohne Daten wird man schwer helfen können. Aber da die Fehlermeldung nichts mit dem Code zu tun hat, könnte es auch sein, dass der Fehler woanders herkommt?

          Struppi.

          1. Lieber Struppi,

            Das dürfte zu falschen Ergebnissen führen, da er strings vergleichen möchte.

            na dann soll er doch gleich (a.length > b.length) schreiben.

            Liebe Grüße aus Ellwangen,

            Felix Riesterer.

            --
            ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
            1. Das dürfte zu falschen Ergebnissen führen, da er strings vergleichen möchte.

              na dann soll er doch gleich (a.length > b.length) schreiben.

              Was soll das bewirken? Damit vergleichst du keine Strings?
              Er will die Strings ja sortieren und genau dafür braucht er a > b.

              Struppi.

      2. leider bekomme ich die Fehlermeldung immer noch. Habe den Code wie folgt geändert und somit die Fehlermeldung auf folgende Zeile "beschränkt":
        else if (a>b) //fehlerverursachende Zeile

        Meine eigenen Tests mit dem Internet Explorer 6 haben ergeben, dass er anscheinend beliebige Werte vergleichen kann, Zahlen, Strings, boolsche Werte, Arrays, Funktionen, undefined, beliebige Objekte, alles mit allem verglichen habe ich nicht, könntest du ja nochmal machen. Somit kann a>b keinen Fehler verursachen, es sei denn, eines von beiden ist undefiniert (nicht undefined!). Dazu passt allerdings die Fehlermeldung nicht.
        Eingefallen ist mir allerdings, dass der IE manchmal Probleme hat, auch tatsächlich die richtige Fehlerzeilennummer auszugeben, eventuell liegt der Fehler ja doch woanders?

        --
        Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
        Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|