JürgenB: localeCompare und negative Zahlen

problematische Seite

Hallo,

auf dieser Seite verwende ich zum Vergleichen die Methode localeCompare in der Form return a[sortiert].localeCompare(b[sortiert],doclang,{numeric:true});, also mit dem Parameter numeric:true.

Leider wird die Spalte mit den negativen Zahlen falsch sortiert. Verwende ich die Funktion falsch, oder kennt localeCompare keine negativen Zahlen?

Gruß
Jürgen

PS doclang hat den Wert "de";

  1. problematische Seite

    Verwende ich die Funktion falsch, oder kennt localeCompare keine negativen Zahlen?

    String.localeCompare() ist eine Stringfunktion. MFG

    1. problematische Seite

      Hallo,

      String.localeCompare() ist eine Stringfunktion.

      Stimmt. -1.234 aus dem DOM gelesen ist ein String. Meine Hoffnung war, das es als Zahl interpretiert wird.

      Gruß
      Jürgen

  2. problematische Seite

    Hallo JürgenB,

    Leider wird die Spalte mit den negativen Zahlen falsch sortiert. Verwende ich die Funktion falsch, oder kennt localeCompare keine negativen Zahlen?

    Kann ich nicht nachvollziehen. Bei mir geht das:

    ["1", "3", "-1", "0"].sort((a, b) => a.localeCompare(b, "de", {numeric: true}))
    // ergibt: (4) ["-1", "0", "1", "3"]
    

    Edit: ah, verstehe - du meinst innerhalb der negativen Zahlen. Ja, das ist bei mir auch falsch. Nein, es sieht nicht so aus als machst du etwas falsch. Ich würde das als Bug oder zumindest als irreführende Parametrisierung einstufen: {numeric: true} legt nahe, dass ein Vergleich von Nummer stattfindet und nicht mehr von Strings. Ist aber offensichtlich nicht der Fall. Mal sehen, was der Standard dazu sagt…

    LG,
    CK

    1. problematische Seite

      Hallo Christian,

      danke. Ich werde dann wohl localeCompare nur für Nicht-Zahlen nehmen, und für Zahlen die alte Funktion behalten müssen. Schade.

      Gruß
      Jürgen

      1. problematische Seite

        Hallo JürgenB,

        danke. Ich werde dann wohl localeCompare nur für Nicht-Zahlen nehmen, und für Zahlen die alte Funktion behalten müssen. Schade.

        Ich hab jetzt mal im Standard geblättert… auf den ersten Blick sieht das nach „unterspezifiziert“ aus. Der sagt zum eigentlichen Vergleich nämlich gar nichts aus. Der sagt nur das hier:

        The two Strings are compared in an implementation-defined fashion.

        Und:

        The result is intended to order String values in the sort order specified by the effective locale and collation options computed during construction of collator, and will be negative, zero, or positive, depending on whether x comes before y in the sort order, the Strings are equal under the sort order, or x comes after y in the sort order, respectively.

        Und:

        [[Numeric]] is a Boolean value, specifying whether numeric sorting is used.

        Kein Wort darüber, wie eigentlich genau verglichen werden soll. Ich könnte mir sogar vorstellen, dass das abhängig von OS und Umgebung/Locale ist…

        LG,
        CK

        1. problematische Seite

          Hallo Christian,

          noch mal danke fürs nachsehen.

          [[Numeric]] is a Boolean value, specifying whether numeric sorting is used.

          Kein Wort darüber, wie eigentlich genau verglichen werden soll. Ich könnte mir sogar vorstellen, dass das abhängig von OS und Umgebung/Locale ist…

          Aber -3 sollte in allen Sprachen und Systemen kleiner als -2 sein.

          Wäre schön gewesen, im Tutorial auf die Unterscheidung zwischen Text und Zahl verzichten zu können.

          Gruß
          Jürgen

          1. problematische Seite

            Hallo JürgenB,

            Aber -3 sollte in allen Sprachen und Systemen kleiner als -2 sein.

            Ja. Wie gesagt: ich halte das für unterspezifiziert.

            Ich vermute, dass das - nicht als Teil einer Zahl erkannt wird und deshalb ein Fallback auf einen „normalen“ Vergleich gemacht wird. Da der Standard dazu aber nichts sagt, kann man auch nicht sagen, dass das falsch ist…

            LG,
            CK

            1. problematische Seite

              Hallo,

              Ich vermute, dass das - nicht als Teil einer Zahl erkannt wird und deshalb ein Fallback auf einen „normalen“ Vergleich gemacht wird. Da der Standard dazu aber nichts sagt, kann man auch nicht sagen, dass das falsch ist…

              Würde dann nicht auf Jürgens Beispielseite die -1 zusammen mit -12 und -15 sortiert sein?

              Gruß
              Kalk

              1. problematische Seite

                Hallo Tabellenkalk,

                Ich vermute, dass das - nicht als Teil einer Zahl erkannt wird und deshalb ein Fallback auf einen „normalen“ Vergleich gemacht wird. Da der Standard dazu aber nichts sagt, kann man auch nicht sagen, dass das falsch ist…

                Würde dann nicht auf Jürgens Beispielseite die -1 zusammen mit -12 und -15 sortiert

                Ja, das ist doch auch der Fall:

                LG,
                CK

                1. problematische Seite

                  Hallo,

                  Ja, das ist doch auch der Fall:

                  Es zeigt, dass als Zahl sortiert wird, und nicht zu Strings gefallbackt wird. An sonsten würde -1, -12, -15, -2… sortiert werden.

                  Gruß
                  Kalk

                  1. problematische Seite

                    Hallo Tabellenkalk,

                    Ja, das ist doch auch der Fall:

                    Es zeigt, dass als Zahl sortiert wird, und nicht zu Strings gefallbackt wird. An sonsten würde -1, -12, -15, -2… sortiert werden.

                    Nein, wenn als Zahl sortiert würde, dann würde -15, -12, … sortiert werden. Es wird nach Text zurück gefallen.

                    Und da -15, -12, … alle ein - davor haben, sind die vor den reinen Zahlen. Innerhalb dieser Gruppe wird dann nach dem darauf folgenden Zeichen sortiert – und das ist wieder eine Zahl. Sorry, ich dachte, es wäre offensichtlich, was ich meinte.

                    LG,
                    CK

                    1. problematische Seite

                      Hallo,

                      ich dachte, es wäre offensichtlich, was ich meinte.

                      Weil ich mit einem so ... abwechslungsreichen Algorithmus nicht gerechnet habe

                      Gruß
                      Kalk

                      1. problematische Seite

                        Hallo Tabellenkalk,

                        ich dachte, es wäre offensichtlich, was ich meinte.

                        Weil ich mit einem so ... abwechslungsreichen Algorithmus nicht gerechnet habe

                        Naja, es entbehrt nicht einer gewissen Logik.

                        Aber wie gesagt – sorry. Nächstes mal bin ich ausführlicher. 😀

                        LG,
                        CK

                      2. problematische Seite

                        Hallo,

                        ... abwechslungsreichen Algorithmus ...

                        😀

                        Gruß
                        Jürgen

              2. problematische Seite

                Hallo,

                Würde dann nicht auf Jürgens Beispielseite die -1 zusammen mit -12 und -15 sortiert sein?

                das sieht für mich so aus, als würden im Text Zahlen erkannt, -12 ist ein Minus mit einer Zwölf dahinter. Leider wurden negative Zahlen wohl vergessen bzw. nicht spezifiziert.

                Gruß
                Jürgen