Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Array erzeugen mit JSON-Objekten

    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

    Array erzeugen mit JSON-Objekten

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

      Ich möchte ein Array mit JSON-Objekten erzeugen.
      Als Beispiel:

      let arr = [];
      
      for (let i=0; i<10;i++){
          let jsonObj ={};
          jsonObj.id = i;
          jsonObj.name = "Test";
          for (let j=0;j<5;j++){
              jsonObj.state = '';
              jsonObj.state = 'Statenummer '+ String(j);
              arr.push(jsonObj);
          }
      }
      log(arr);
      
      
      

      Jetzt sollte im Array aber eigentlich

      [{'id':0,'name':'Test','state':'Statenummer 0'},{'id':0,'name':'Test','state':'Statenummer 1'}, usw erscheinen
      

      Es kommt aber: ??

      [{'id':0,'name':'Test','state':'Statenummer 4'},{'id':0,'name':'Test','state':'Statenummer 4'},{'id':0,'name':'Test','state':'Statenummer 4'},{'id':0,'name':'Test','state':'Statenummer 4'},{'id':0,'name':'Test','state':'Statenummer 4'},{'id':1,'name':'Test','state':'Statenummer 4'},{'id':1,'name':'Test','state':'Statenummer 4'},{'id':1,'name':'Test','state':'Statenummer 4'},{'id':1,'name':'Test','state':'Statenummer 4'},{'id':1,'name':'Test','state':'Statenummer 4'},{'id':2,'name':'Test','state':'Statenummer 4'},{'id':2,'name':'Test','state':'Statenummer 4'},{'id':2,'name':'Test','state':'Statenummer 4'},{'id':2,'name':'Test','state':'Statenummer 4'},{'id':2,'name':'Test','state':'Statenummer 4'},{'id':3,'name':'Test','state':'Statenummer 4'},{'id':3,'name':'Test','state':'Statenummer 4'},{'id':3,'name':'Test','state':'Statenummer 4'},{'id':3,'name':'Test','state':'Statenummer 4'},{'id':3,'name':'Test','state':'Statenummer 4'},{'id':4,'name':'Test','state':'Statenummer 4'},{'id':4,'name':'Test','state':'Statenummer 4'},{'id':4,'name':'Test','state':'Statenummer 4'},{'id':4,'name':'Test','state':'Statenummer 4'},{'id':4,'name':'Test','state':'Statenummer 4'},{'id':5,'name':'Test','state':'Statenummer 4'},{'id':5,'name':'Test','state':'Statenummer 4'},{'id':5,'name':'Test','state':'Statenummer 4'},{'id':5,'name':'Test','state':'Statenummer 4'},{'id':5,'name':'Test','state':'Statenummer 4'},{'id':6,'name':'Test','state':'Statenummer 4'},{'id':6,'name':'Test','state':'Statenummer 4'},{'id':6,'name':'Test','state':'Statenummer 4'},{'id':6,'name':'Test','state':'Statenummer 4'},{'id':6,'name':'Test','state':'Statenummer 4'},{'id':7,'name':'Test','state':'Statenummer 4'},{'id':7,'name':'Test','state':'Statenummer 4'},{'id':7,'name':'Test','state':'Statenummer 4'},{'id':7,'name':'Test','state':'Statenummer 4'},{'id':7,'name':'Test','state':'Statenummer 4'},{'id':8,'name':'Test','state':'Statenummer 4'},{'id':8,'name':'Test','state':'Statenummer 4'},{'id':8,'name':'Test','state':'Statenummer 4'},{'id':8,'name':'Test','state':'Statenummer 4'},{'id':8,'name':'Test','state':'Statenummer 4'},{'id':9,'name':'Test','state':'Statenummer 4'},{'id':9,'name':'Test','state':'Statenummer 4'},{'id':9,'name':'Test','state':'Statenummer 4'},{'id':9,'name':'Test','state':'Statenummer 4'},{'id':9,'name':'Test','state':'Statenummer 4'}]
      

      Was mache ich da falsch?
      Vielen Dank.

      AlCalzone 1 Reply Last reply Reply Quote 0
      • AlCalzone
        AlCalzone Developer @MCU last edited by

        @mcu Du definierst in der äußeren Schleife das Objekt und verwendest es in der inneren Schleife mehrfach wieder. Du fügst also 5 Referenzen auf das gleiche Objekt in das Array, bevor du ein neues erstellst. So geht's:

        let arr = [];
        
        for (let i = 0; i < 10; i++) {
          const id = i;
          const name = "Test";
        
          for (let j = 0; j < 5; j++) {
            const state = "Statenummer " + String(j);
            arr.push({ id, name, state });
          }
        }
        
        log(arr);
        

        In Zeile 9 wird jedes Mal ein neues Objekt erstellt und ins Array eingefügt.

        M 1 Reply Last reply Reply Quote 1
        • M
          MCU @AlCalzone last edited by MCU

          @alcalzone Ich muß nochmal nachfragen:
          Wie kann ich dann den const-Wert in einer Abfrage bestimmen?

          
          if (devicesArr[key2].attributes == undefined){
                const deviceattributes = '';
           }else{
                const deviceattributes = devicesArr[key2].attributes; 
           }
          

          Wenn ich das so mache, wird der const-Wert unter in der anderen Schleife nicht erkannt?

          Er muss schon oben defniert werden:

          const deviceattributes = devicesArr[key2].attributes;
          if (devicesArr[key2].attributes == undefined){
                const deviceattributes = ''; /* wird nicht erkannt */
           }else{
                const deviceattributes = devicesArr[key2].attributes; 
           }
          
          
          

          Wie kann ich den const aktualisieren?

          Habs schon gefunden. Danke.
          Stelle den const hinter die Abfrage.

          AlCalzone 1 Reply Last reply Reply Quote 0
          • AlCalzone
            AlCalzone Developer @MCU last edited by AlCalzone

            @mcu const und let gelten immer nur innerhalb des Blocks in dem sie deklariert sind. Ich empfehle die Lektüre von https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/let und verwandten Tutorials.

            In deinem 1. Beispiel je getrennt im if und else und beim 2. zusätzlich noch eine weitere außerhalb, die aber von den "lokalen" Definitionen überdeckt wird. Das was du vorhats geht entweder per let:

            let deviceattributes;
            
            if (devicesArr[key2].attributes == undefined) {
              deviceattributes = "";
            } else {
              deviceattributes = devicesArr[key2].attributes;
            }
            

            oder etwas pragmatischer mit Fallback-Wert:

            const deviceattributes = devicesArr[key2].attributes || "";
            
            1 Reply Last reply Reply Quote 1
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            840
            Online

            31.8k
            Users

            80.0k
            Topics

            1.3m
            Posts

            javascript
            2
            4
            384
            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