2017-11-03 4 views
0

Ich habe einige Variablen in einer Schleife, die bei jeder Iteration unterschiedlich sind.So erstellen Sie dynamisch Objekte mit Variablen

Mit diesen Variablen, die ich wie so ein neues Objekt mit einigen Teilobjekten füllen wollen:

newProduct[key][prop][val] = "value"; 

Was ich will, ist ein Objekt wie

car{ //key 
    color: { //prop 
     door: "value" //val + value 
    } 
} 

Aber mein Problem ist, dass [val] ist nicht ein Objekt von [prop] und das ist es, was Node.JS versucht zu tun.

Ich habe es versucht, einige andere Klammern wie [prop[val]] und [prop + "." + val], aber das scheint nicht zu funktionieren. Wie kann ich das zur Arbeit bringen?

+0

Ich glaube, Sie brauchen um uns zu zeigen, was du hast und was willst du? – hurricane

Antwort

1

Versuchen mit Objekt zuweisen wie folgt aus:

// It should be every iteration values 
 
var key = 'car'; 
 
var prop = 'color'; 
 
var val = 'door'; 
 
var value = 'value'; 
 

 
var newProduct = Object.assign({ [ key ] :{ [ prop ] : { [ val ] : value }} }); 
 
console.log(newProduct);

+1

Danke! 'Object.assign' ist der Trick! – NVO

2

Sie können jede Eigenschaft überprüfen und ein Standardobjekt verwenden. zuweisen später den Wert

function setValue(object, path, value) { 
 
    var last = path.pop(); 
 
    path.reduce((o, k) => o[k] = o[k] || {}, object)[last] = value; 
 
} 
 

 
var newProduct = {}; 
 

 
setValue(newProduct, ['car', 'color', 'door'], 42); 
 

 
console.log(newProduct);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

Sie müssen jedes Objekt auf jeder Ebene erstellen, bevor Sie sie verwenden können. Hier ist ein sehr einfaches Beispiel. Man könnte es verfeinern, um es wiederverwendbar, offensichtlich mehr zu machen:

var newProduct = {}; 
 
if (!newProduct["car"]) newProduct["car"] = {}; 
 
if (!newProduct["car"]["color"]) newProduct["car"]["color"] = {}; 
 
newProduct["car"]["color"]["door"] = "value"; 
 
console.log(newProduct);

Verwandte Themen