Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Array vielleicht?

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.6k

Array vielleicht?

Geplant Angeheftet Gesperrt Verschoben Ungelöst JavaScript
javascript
8 Beiträge 4 Kommentatoren 554 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Lenny.CBL Offline
    Lenny.CBL Offline
    Lenny.CB
    Most Active
    schrieb am zuletzt editiert von Bluefox
    #1

    Hallo zusammen,

    ich habe mal wieder ein Problem, dass ich allein nicht lösen kann.

    ich habe ein JSON aus dem ich ein paar Zeiten hole (naja, sind ja noch keine richtigen Zeiten :shock: ).

    Hier mal das Beispiel. Das JSON ist wegen der "Übersichtlichkeit" eingekürzt.

    var body = '{"testJSON":{"state":{"noonTime":[1,50],"eveningTime":[2,45],"tomorrowTime":[12,30]}}}';
    
    var obj = JSON.parse(body);
        for (i=0; i<(Object.keys(obj).length); i++){
            log(obj[Object.keys(obj)[i]].state.noonTime);
            log(obj[Object.keys(obj)[i]].state.eveningTime);
            log(obj[Object.keys(obj)[i]].state.tomorrowTime);
    
            var noonTime_hh = obj[Object.keys(obj)[i]].state.noonTime[0];
            var noonTime_mm = obj[Object.keys(obj)[i]].state.noonTime[1];          
            var noonTime = ((noonTime_hh > 9) ? noonTime_hh = noonTime_hh : noonTime_hh = '0' + noonTime_hh) + ':' + ((noonTime_mm > 9) ? noonTime_mm = noonTime_mm : noonTime_mm = '0' + noonTime_mm);
            log(noonTime);
        }
    

    Nun habe ich den unteren Teil für jede einzelne Zeit geschrieben. Das sind bei 10 Zeiten im JSON viel Code. Ich wollte aufräumen und einkürzen, da dachte ich "man kann sicher zusammen fassen". Ich hatte ein Array im Kopf, bekomme es aber nicht hin.

    Frage: wie kann ich das "rote" variabel machen?

    var noonTime_hh = obj[Object.keys(obj)_~~[i]~~].state.noonTime[0];
    
    var noonTime_mm = obj[Object.keys(obj)_~~[i]~~].state.noonTime[1];
    

    Grüße, Lenny__

    1 Antwort Letzte Antwort
    0
    • Lenny.CBL Offline
      Lenny.CBL Offline
      Lenny.CB
      Most Active
      schrieb am zuletzt editiert von
      #2

      Keiner ne Idee wie ich das anstellen könnte?

      1 Antwort Letzte Antwort
      0
      • BluefoxB Offline
        BluefoxB Offline
        Bluefox
        schrieb am zuletzt editiert von
        #3

        @Lenny-CB said in Array vielleicht?:
        Es ist nicht ganz klar, was bei dir nicht funktioniert, weil dein Code sieht schon OK aus, (außer, dass sehr ineffektiv)

        var body = '{"testJSON":{"state":{"noonTime":[1,50],"eveningTime":[2,45],"tomorrowTime":[12,30]}}}';
        
        var obj = JSON.parse(body);
        const padding = num => num > 9 ? num : '0' + num;
        
        Object.keys(obj).forEach(attr => {
            const state = obj[attr].state;
            console.log(state.noonTime);
            console.log(state.eveningTime);
            console.log(state.tomorrowTime);
        
        	console.log(`${padding(state.noonTime[0])}:${padding(state.noonTime[1])}`);
        	console.log(`${padding(state.eveningTime[0])}:${padding(state.eveningTime[1])}`);
        	console.log(`${padding(state.tomorrowTime[0])}:${padding(state.tomorrowTime[1])}`);
        });
        
        
        Lenny.CBL 1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von paul53
          #4

          Versuche es mal so:

          var body = '{"testJSON":{"state":{"noonTime":[1,50],"eveningTime":[2,45],"tomorrowTime":[12,30]}}}';
          
          var obj = JSON.parse(body).testJSON.state;
          var keys = Object.keys(obj);
          var vals = Object.values(obj);
          
          for(let i = 0; i < keys.length; i++) {
              var h = vals[i][0];
              if(h < 10) h = '0' + h;
              var m = vals[i][1];
              if(m < 10) m = '0' + m;
              log(keys[i] + ' ' + h + ':' + m);
          }
          
          

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          AlCalzoneA 1 Antwort Letzte Antwort
          1
          • paul53P paul53

            Versuche es mal so:

            var body = '{"testJSON":{"state":{"noonTime":[1,50],"eveningTime":[2,45],"tomorrowTime":[12,30]}}}';
            
            var obj = JSON.parse(body).testJSON.state;
            var keys = Object.keys(obj);
            var vals = Object.values(obj);
            
            for(let i = 0; i < keys.length; i++) {
                var h = vals[i][0];
                if(h < 10) h = '0' + h;
                var m = vals[i][1];
                if(m < 10) m = '0' + m;
                log(keys[i] + ' ' + h + ':' + m);
            }
            
            
            AlCalzoneA Offline
            AlCalzoneA Offline
            AlCalzone
            Developer
            schrieb am zuletzt editiert von
            #5

            @paul53 said in Array vielleicht?:

            Versuche es mal so:

            Oder wenn Object.values nicht existiert (Node < 8), dann so:

            // ...
            for(let i = 0; i < keys.length; i++) {
                var h = obj[keys[i]][0];
                // ...
            }

            Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

            1 Antwort Letzte Antwort
            0
            • Lenny.CBL Offline
              Lenny.CBL Offline
              Lenny.CB
              Most Active
              schrieb am zuletzt editiert von
              #6

              ich probiere...

              1 Antwort Letzte Antwort
              0
              • BluefoxB Bluefox

                @Lenny-CB said in Array vielleicht?:
                Es ist nicht ganz klar, was bei dir nicht funktioniert, weil dein Code sieht schon OK aus, (außer, dass sehr ineffektiv)

                var body = '{"testJSON":{"state":{"noonTime":[1,50],"eveningTime":[2,45],"tomorrowTime":[12,30]}}}';
                
                var obj = JSON.parse(body);
                const padding = num => num > 9 ? num : '0' + num;
                
                Object.keys(obj).forEach(attr => {
                    const state = obj[attr].state;
                    console.log(state.noonTime);
                    console.log(state.eveningTime);
                    console.log(state.tomorrowTime);
                
                	console.log(`${padding(state.noonTime[0])}:${padding(state.noonTime[1])}`);
                	console.log(`${padding(state.eveningTime[0])}:${padding(state.eveningTime[1])}`);
                	console.log(`${padding(state.tomorrowTime[0])}:${padding(state.tomorrowTime[1])}`);
                });
                
                
                Lenny.CBL Offline
                Lenny.CBL Offline
                Lenny.CB
                Most Active
                schrieb am zuletzt editiert von Lenny.CB
                #7

                @Bluefox: Es ist nicht ganz klar, was bei dir nicht funktioniert, weil dein Code sieht schon OK aus,

                also dein Code geht schon mal und verkürzt meinen pro Zeit auf 3 Codezeilen.

                was wollte ich machen:
                Zeile1: Stunden abfragen
                Zeile2: Minuten abfragen
                Zeile3: Zeit zusammenfassen und bei Einstelligkeit eine "0" davor

                nun habe ich dennoch bei ca. 10 Zeiten 10 mal die Code-Zeile:

                console.log(`${padding(state.noonTime[0])}:${padding(state.noonTime[1])}`);
                

                ich hatte halt gedacht, das man das nur einmal variabel schreiben braucht, etwa wie:

                console.log(`${padding(state.[j][0])}:${padding(state.[j][1])}`);
                

                das [j] soll finden: noonTime, eveningTime, tomorrowTime
                und das [0] bzw. [1] die Stunden/Minuten
                Muss dann natürlich noch die entsprechende for-Schleife rein.

                @Bluefox: (außer, dass sehr ineffektiv)

                kannst du das mal verdeutlichen?

                BluefoxB 1 Antwort Letzte Antwort
                0
                • Lenny.CBL Lenny.CB

                  @Bluefox: Es ist nicht ganz klar, was bei dir nicht funktioniert, weil dein Code sieht schon OK aus,

                  also dein Code geht schon mal und verkürzt meinen pro Zeit auf 3 Codezeilen.

                  was wollte ich machen:
                  Zeile1: Stunden abfragen
                  Zeile2: Minuten abfragen
                  Zeile3: Zeit zusammenfassen und bei Einstelligkeit eine "0" davor

                  nun habe ich dennoch bei ca. 10 Zeiten 10 mal die Code-Zeile:

                  console.log(`${padding(state.noonTime[0])}:${padding(state.noonTime[1])}`);
                  

                  ich hatte halt gedacht, das man das nur einmal variabel schreiben braucht, etwa wie:

                  console.log(`${padding(state.[j][0])}:${padding(state.[j][1])}`);
                  

                  das [j] soll finden: noonTime, eveningTime, tomorrowTime
                  und das [0] bzw. [1] die Stunden/Minuten
                  Muss dann natürlich noch die entsprechende for-Schleife rein.

                  @Bluefox: (außer, dass sehr ineffektiv)

                  kannst du das mal verdeutlichen?

                  BluefoxB Offline
                  BluefoxB Offline
                  Bluefox
                  schrieb am zuletzt editiert von
                  #8

                  @Lenny-CB @AlCalzone hat schon den richtigen code gepostet:

                  var body = '{"testJSON":{"state":{"noonTime":[1,50],"eveningTime":[2,45],"tomorrowTime":[12,30]}}}';
                  
                  var obj = JSON.parse(body);
                  const padding = num => num > 9 ? num : '0' + num;
                  
                  Object.keys(obj).forEach(attr => {
                      const state = obj[attr].state;
                  
                      Object.keys(state).forEach(name =>
                          console.log(`${name} - ${padding(state[name][0])}:${padding(state[name][1])}`));
                  });
                  

                  außer, dass sehr ineffektiv

                  Du liest 6 mal Object.keys(obj) und davon 5 mal im Zyklus.

                  1 Antwort Letzte Antwort
                  0
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  823

                  Online

                  32.4k

                  Benutzer

                  81.4k

                  Themen

                  1.3m

                  Beiträge
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                  ioBroker Community 2014-2025
                  logo
                  • Anmelden

                  • Du hast noch kein Konto? Registrieren

                  • Anmelden oder registrieren, um zu suchen
                  • Erster Beitrag
                    Letzter Beitrag
                  0
                  • Home
                  • Aktuell
                  • Tags
                  • Ungelesen 0
                  • Kategorien
                  • Unreplied
                  • Beliebt
                  • GitHub
                  • Docu
                  • Hilfe