Динамический многомерный объект в Javascript, например PHP

В 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 не имеет ассоциативных массивов, таких как PHP. Вы должны создавать объекты и перебирать их. Для перебора объекта вы можете использовать либо Object.keys, либо цикл for-in.

Rajender Joshi 17.07.2019 08:22

Можете ли вы привести пример того, как вы получаете набор данных, который должен быть в объекте?

toffler 17.07.2019 08:30
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
110
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Определите внешний объект, где значение одного из его значений является другим объектом, и так далее:

var obj = {
  layer1: {
    layer2: 'value'
  }
};

console.info(obj.layer1.layer2);

У меня работает нормально, с какими проблемами вы столкнулись?

Snow 17.07.2019 08:19

Я уже сказал, что я должен сделать это динамически. Я не знаю, сколько там слоев и какое будет имя слоя. Это будет задано как условие.

Zawad 17.07.2019 08:22

Вы можете использовать рекурсивную функцию, где вы можете определить уровень глубины на основе типа следующего значения.

Rinkesh Golwala 17.07.2019 08:35

@RinkeshGolala да .. Это может быть выходом. Спасибо за лучшую идею.

Zawad 17.07.2019 11:14
Ответ принят как подходящий

Вы хотите переопределить переменную obj? то вы можете использовать следующее.

var object = {
      layer1: {
            layer2: 'value2'
      }
};

object = {
      ...object, ...{
            layer3: {
                  layer4: 'value4'
            }
      }
}

console.info(object)

Спасибо за вашу идею. Но не тот ответ, который я хотел. Но я принимаю вашу идею, в некоторых случаях это может помочь .. :)

Zawad 17.07.2019 08:36

Другие вопросы по теме