Как динамически добавлять объекты к объектам внутри объекта

#javascript #object #dynamic

#javascript #объект #динамический

Вопрос:

Итак, у меня есть объект: structure = {} и я могу динамически добавлять к нему объект с structure[obj] помощью, но мне нужно иметь возможность добавлять еще один объект внутри этого. Я пытался сделать structure[obj][obj2] , но это не работает. Как правильно это сделать? Спасибо!

Комментарии:

1. Пожалуйста, предоставьте свой код, в котором вам удалось назначить объекты. Just structure[obj] — это не присваивание, а выражение.

2. Вот код: var structure = {} функция AddObject(объект){структура[объект] = «»; } функция ObjectToObject(объект2,объект) {структура[объект][объект2] = «»; } AddObject(«foo»); ObjectToObject(«bar»,»foo»);

3. Лучше всего отредактировать ваш вопрос (для удобства чтения кода)

Ответ №1:

Если вы назначили

 structure["foo"] = {bar: 1}
  

Затем вы можете назначить дополнительный элемент следующим образом

 structure["foo"]["harry"] = 99;
  

Но вы не можете сделать это без первого шага, потому что structure[«foo»] еще не будет существовать

Ответ №2:

С помощью этого оператора:

 structure[object] = "";
  

Вы добавляете не объект structure , а пустую строку, которая является примитивным значением, а не объектом. Также имя object вводит в заблуждение в вашем коде, поскольку, по-видимому, у вас есть строковое значение для него ( 'foo' ) . Но даже если бы это был настоящий объект, используя его в приведенном выше заявлении, JavaScript примет его строковое значение (которое было бы 'Object object' для простых объектов) и будет использовать его в качестве ключа (свойства) structure .

Посмотрите на весь фрагмент кода:

 var structure = {} 
function addObject(object){ 
    structure[object] = ""; 
} 
function ObjectToObject(object2, object) { 
    structure[object][object2] = ""; 
} 
addObject("foo"); 
ObjectToObject("bar","foo");
  

… оператор structure[object][object2] = ""; не будет иметь эффекта. Это сводится к следующему:

 structure.foo.bar = "";
  

Как structure.foo и строковое значение, JavaScript принудительно преобразует его в строковый объект, потому что в противном случае оно не может быть применено .bar . Так что на самом деле это то, что выполняется:

 new String(structure.foo).bar = "";
  

Назначение '' действительно выполняется, но затем этот временный объект снова удаляется, так что вы никогда больше этого bar не увидите.

Как вы должны это сделать:

Не назначайте строку в первой функции, а пустой объект. Также используйте лучшие имена для ваших переменных:

 var structure = {} 
function addObject(key){ 
    structure[key] = {}; 
} 
function ObjectToObject(key2, key) { 
    structure[key][key2] = {}; 
} 
addObject("foo"); 
ObjectToObject("bar","foo");

console.log(structure);