Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. [gelöst]: array sortieren nach 2 werten

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst]: array sortieren nach 2 werten

    This topic has been deleted. Only users with topic management privileges can see it.
    • liv-in-sky
      liv-in-sky last edited by liv-in-sky

      ich habe ein array, welches nach 2 werten sortiert werden soll - die funktion dazu ist
      hat jmd eine idee dazu? evtl. @paul53 vielleicht hast du nochmal lust mir schon wieder zu helfen

         if (sortList==1) {
         myArr.sort(
         function(a, b) {          
            if (a[5] === b[5]) {
               // hier wird nach zahlen sortiert
               return b[4] - a[4];
            }
            return a[5] > b[5] ? 1 : -1;
         });
         
          } else
         
        {  myArr.sort(
         function(a, b) {          
            if (a[5] === b[5]) {
               // hier werden strings sortiert
               return b[0].toUpperCase() - a[0].toUpperCase();
            }
            return a[5] > b[5] ? 1 : -1;
         });
         }
      

      im ersten block (sortlist=1) sind die werte für b[4] - a[4] zahlen - da funktioniert es
      im 2ten block sind b[0] - a[0] strings - da funktioniert es nicht
      da ich das ganze aus github kopiert habe, weiß ich leider nicht, wie ich den 2ten block ändern muss, damit mit strings sortiert werden kann

      beispiel erster block - das datum ist richtig sortiert - in der tabelle sieht man die werte arr[5] nicht - das sind die gelben überschriften

      Image 1.png

      im 2ten block soll nach der ersten spalte sortiert werden

      paul53 F 2 Replies Last reply Reply Quote 0
      • paul53
        paul53 @liv-in-sky last edited by paul53

        @liv-in-sky
        String-Vergleiche funktionieren nur, wenn die Strings gleich lang sind, also die Werte führende 0 enthalten.
        Tipp: Wandle in der Funktion erst a[5] und b[5] in Zahlen (Minuten).

        @liv-in-sky sagte in frage: array sortieren nach 2 werten:

        return b[0].toUpperCase() - a[0].toUpperCase();
        

        Was soll eine Substraktion von Strings ergeben ?

        return a[0].toUpperCase() > b[0].toUpperCase() ? 1 : -1;
        
        liv-in-sky 1 Reply Last reply Reply Quote 0
        • F
          fastfoot @liv-in-sky last edited by

          @liv-in-sky Vielleicht hilf das kleine Beispiel

          //https://stackoverflow.com/questions/4340227/sort-mixed-alpha-numeric-array
          var reA = /[^a-zA-Z]/g;
          var reN = /[^0-9]/g;
          
          function sortAlphaNum(a, b) {
            var aA = a.replace(reA, "");
            var bA = b.replace(reA, "");
            if (aA === bA) {
              var aN = parseInt(a.replace(reN, ""), 10);
              var bN = parseInt(b.replace(reN, ""), 10);
              return aN === bN ? 0 : aN > bN ? 1 : -1;
            } else {
              return aA > bA ? 1 : -1;
            }
          }
          console.log(
          ["A1", "A10", "A11", "A12", "A2", "A3", "A4", "B10", "B2", "F1", "F12", "F3"].sort(sortAlphaNum)
          )
          
          1 Reply Last reply Reply Quote 1
          • liv-in-sky
            liv-in-sky @paul53 last edited by liv-in-sky

            @paul53 (mein problem war ja, das es keinen sinn macht, das strings von einander abgezogen werden 🙂 ) genau dafür habe ich ersatz gesucht

            @fastfoot (ds beispiel funktioniert nur, wenn keine leerzeichen vorhanden sind und mind. eine zahl im text steht - sonst macht parseInt ein "NAN" ergebnis - bei mir soll es nur um alphabeitisch sortierung gehen)

            danke für eure inputs - hat etwas gedauert habe aber dadurch eine lösung gefunden

            Image 4.png

              myArr.sort(
                             
                             function(a, b) {
                                                        var aA = a[5]//.replace(reA, "");
                                                        var bA = b[5]//.replace(reA, "");
                                                        if (aA === bA) {
                                                                         return a[0].toLowerCase().localeCompare(b[0].toLowerCase());
            															
              }
            });
            
            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            919
            Online

            31.8k
            Users

            80.0k
            Topics

            1.3m
            Posts

            javascript
            3
            4
            379
            Loading More Posts
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes
            Reply
            • Reply as topic
            Log in to reply
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            The ioBroker Community 2014-2023
            logo