NEWS
Array erzeugen mit JSON-Objekten
-
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 erscheinenEs 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. -
@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.
-
@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. -
@mcu
constundletgelten 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
ifundelseund beim 2. zusätzlich noch eine weitere außerhalb, die aber von den "lokalen" Definitionen überdeckt wird. Das was du vorhats geht entweder perlet:let deviceattributes; if (devicesArr[key2].attributes == undefined) { deviceattributes = ""; } else { deviceattributes = devicesArr[key2].attributes; }oder etwas pragmatischer mit Fallback-Wert:
const deviceattributes = devicesArr[key2].attributes || "";