JS: Verschränkte Objekt-Struktur mit Objekten teilw. befüllen
-
Wieder Kurioses aus der
ZauberWeb-Ecke...let rootObj = {}; let nestedObj = {}; let data = [{ eins: 1 }, { zwei: 2 }, { drei: 3 }]; for (let key in data) { let value = data[key]; switch (key) { case 'eins': case 'drei': nestedObj[key] = value; break; default: break; } } rootObj['child1'] = nestedObj; console.log(rootObj);Eigentlich sollte:
{ child1: { drei: 3, eins: 1 } }ausgegeben werden (oder erst eins, dann drei, egal)... Die aktuelle Ausgabe ist jedoch:
{ child1: { ... } }Habe lange gebraucht, bis mir das Verhalten aufgefallen ist, die KI sagte, es sei alles ok... Was mache ich falsch, wie geht das in JS?
Ich erwarte keine kanonische Antwort (bzw. Lösung), eine educated guess würde mir schon genügen.
-
@Anon-81275 sagte in JS: Verschränkte Objekt-Struktur mit Objekten teilw. befüllen:
Ich erwarte keine kanonische Antwort (bzw. Lösung), eine educated guess würde mir schon genügen.
Mein "educated guess" ist, dass du vermutlich bereits exakt die Ausgabe erhältst, die du erwartest. Ob
{ ... }etwas anderes ist als{ drei: 3, eins: 1 }kann man erst sagen, wenn man weiß, wofür die "..." stehen. Vielleicht einfach mal dazu auch nochrootObj['child1']ausgeben. Mein Bauchgefühl sagt mir, dass derconsole.log-Printer nur eine Ebene in das Objekt hinein geht, damit es übersichtlich bleibt. Es heißt ja auch "log" und nicht "to_json" oder sowas.
-
@Finnegan sagte in JS: Verschränkte Objekt-Struktur mit Objekten teilw. befüllen:
dass du vermutlich bereits exakt die Ausgabe erhältst, die du erwartest
Mir Dunning-Kruger zu unterstellen, ist natürlich abermals eine bewusste Provokation von dir...
https://jsfiddle.net/muzygxLq/
Genügt das, oder bedarf es noch einem Screenshot o. Ä.?
Wenn ich die Werte dem
nestedObj"zu Fuß" zuweise, dann geht es allerdings. Die Frage wäre also, weshalb dieses abweichende Verhalten (UB sagt man glaube ich im C++-Kontext...) hierbei auftritt.Vergleich:
let rootObj = {}; let nestedObj = {}; let data = [{ eins: 1 }, { zwei: 2 }, { drei: 3 }]; nestedObj['eins'] = 1; nestedObj['drei'] = 3; rootObj['child1'] = nestedObj; console.log(JSON.stringify(rootObj)); console.log(rootObj);Ich glaube nicht, dass das ein Bug ist - aber, wer weiß das schon.
Ich verstehe auch nicht genau, weshalb es solche Funktionen wie structuredCloneusw. gibt...