#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);