В PHP мы можем легко это сделать
<?php
$arr['layer1']['layer2'] = "value"; // works fine in PHP
Возвращает:
Array(
[layer1] => Array(
[layer2] => "value"
)
)
Этот код будет работать нормально, потому что Объявление переменной в php не требуется
Но в Javascript декларация переменных обязательна.
Значит, это не работает в Javascript
var obj['layer1']['layer2'] = "value"; // doesn't work on JS
// sorry I can't use the code below
var obj = {};
obj['layer1'] = {};
obj['layer1']['layer2'] = "value";
// I can't use this also
var obj = {
"layer1" : {
"layer2" : "value"
}
};
Uncaught TypeError: Cannot set property 'layer2' of undefined
Я не могу использовать этот код, потому что мне нужно создать объект Динамически. И в нем нет фиксированного ключа, даже фиксированного слоя. Итак, Мне нужно что-то, что точно будет работать как PHP
Можете ли вы привести пример того, как вы получаете набор данных, который должен быть в объекте?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Определите внешний объект, где значение одного из его значений является другим объектом, и так далее:
var obj = {
layer1: {
layer2: 'value'
}
};
console.info(obj.layer1.layer2);У меня работает нормально, с какими проблемами вы столкнулись?
Я уже сказал, что я должен сделать это динамически. Я не знаю, сколько там слоев и какое будет имя слоя. Это будет задано как условие.
Вы можете использовать рекурсивную функцию, где вы можете определить уровень глубины на основе типа следующего значения.
@RinkeshGolala да .. Это может быть выходом. Спасибо за лучшую идею.
Вы хотите переопределить переменную obj? то вы можете использовать следующее.
var object = {
layer1: {
layer2: 'value2'
}
};
object = {
...object, ...{
layer3: {
layer4: 'value4'
}
}
}
console.info(object)Спасибо за вашу идею. Но не тот ответ, который я хотел. Но я принимаю вашу идею, в некоторых случаях это может помочь .. :)
Javascript не имеет ассоциативных массивов, таких как PHP. Вы должны создавать объекты и перебирать их. Для перебора объекта вы можете использовать либо Object.keys, либо цикл for-in.