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 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. -
@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
const
undlet
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
undelse
und 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 || "";