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] key mit größten Wert in Struktur herausfinden

    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] key mit größten Wert in Struktur herausfinden

    This topic has been deleted. Only users with topic management privileges can see it.
    • Ben1983
      Ben1983 last edited by Ben1983

      Hallo. Kann ich irgendwie herausfinden welcher Wert einer Struktur am größten ist und deren Key zusätzlich?
      Mir ist schon klar, dass es auch andere Werte geben kann in einer Struktur, deshalb vielleicht auch eine Sortierung? Der Werte?

      Also Hintergrund ist, dass ich gerne den Key herausfinden würde, hinter welchem sich der größte Wert versteckt.
      Bsp.

      {a:11,b:23,n:12}
      

      Ich würde gerne b als Lösung erhalten.

      Ben1983 1 Reply Last reply Reply Quote 0
      • Ben1983
        Ben1983 @Ben1983 last edited by Ben1983

        Habe es gerade selbst heraus gefunden…

        const st = {a:1,xy:33,f:4};
        const abc = Object.keys(st).sort();
        console.log(st);
        console.log(abc);
        console.log(abc[abc.length-1]);
        console.log(st[abc[abc.length-1]]);
        
        
        F OliverIO 2 Replies Last reply Reply Quote 0
        • F
          fastfoot @Ben1983 last edited by

          @ben1983 hier eine Alternative mit jsonata, funktioniert auch mit Blockly. jsonata ist nicht so easy zu erlernen, aber unfassbar cool 🙂

          const myObj = { a: 1, xy: 33, f: 4, d: 33 };
          const expr1 = `$max(*)`
          const expr2 = `$keys($spread()^(>*)[0])`
          const expr3 = `$keys($spread()^($keys($)))`
          const jsonata = async (obj, expr) => await jsonataExpression(obj, expr);
          
          async function test() {
              log(await jsonata(myObj, expr3));
              log(await jsonata(myObj, expr2));
              log(await jsonata(myObj, expr1));
          }
          
          test()
          
          Ben1983 1 Reply Last reply Reply Quote 1
          • Ben1983
            Ben1983 @fastfoot last edited by

            @fastfoot danke

            1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @Ben1983 last edited by OliverIO

              @ben1983
              Sort ist Performance mäßig teuer
              Besser wäre reduce
              Ist zwar auch eine Array Methode
              Aber auch mit Obect.keys Befehl erhältst du ja ein Array der keys. Im callback der reduce Funktion kannst du dann die Max Funktion anwenden und erhältst dann exakt einen Wert zurück ohne weitere Array oder Objekt Manipulationen

              Ben1983 1 Reply Last reply Reply Quote 0
              • Ben1983
                Ben1983 @OliverIO last edited by

                @oliverio OK, hast Du ein Beispiel?

                F 1 Reply Last reply Reply Quote 0
                • F
                  fastfoot @Ben1983 last edited by

                  @ben1983 noch zwei Möglichkeiten. Ich finde jsonata schöner, wenn auch für dieses Beispiel etwas überdimensioniert

                  const st = { "a": 1, "xy": 33, "f": 4, "d": 32 };
                  
                  //reduce
                  const props = Object.keys(st);
                  let maxProp = props.reduce((p, a, i) => st[p] >= st[a] ? p : a)
                  let maxVal = props.reduce((p, a, i) => st[p] >= st[a] ? st[p] : st[a]);
                  log(maxProp + ' -> ' + maxVal);
                  
                  //for... in
                  maxVal = 0;
                  maxProp = '';
                  for (const prop in st) {
                      if (st[prop] > maxVal) {
                          maxVal = st[prop];
                          maxProp = prop;
                      }
                  }
                  log(maxProp + ' -> ' + maxVal);
                  
                  1 Reply Last reply Reply Quote 0
                  • OliverIO
                    OliverIO last edited by

                    @ben1983

                    Beispiel siehe maxVal Beispiel von fastfood

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    867
                    Online

                    31.9k
                    Users

                    80.1k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    158
                    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