Доступ Javascript к вложенному объекту по динамическому имени

#javascript #arrays #object #nested

#javascript #массивы #объект #вложенный

Вопрос:

У меня есть этот объект :

 var steps = {

    'step0' : {
        tour_title:"Lorem ipsum dolor",
        tour_content:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin tristique aliquam justo, quis eleifend metus porta congue. Nam facilisis elit gravida lorem placerat, at ultricies lorem porta. Aenean faucibus libero gravida adipiscing aliquam. Nulla porttitor metus justo, in lacinia purus consectetur consectetur.", 
        position:"midle"
    }, 
    'step1' : {
        tour_title:"Lorem ipsum dolor 2",
        tour_content:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin tristique aliquam justo, quis eleifend metus porta congue. Nam facilisis elit gravida lorem placerat, at ultricies lorem porta. Aenean faucibus libero gravida adipiscing aliquam. Nulla porttitor metus justo, in lacinia purus consectetur consectetur.", 
        position:"midle"
    }   
}
  

У меня также есть переменная, которая определяет, на каком этапе я нахожусь (она объявлена вне моего js-файла) :

 var user_step = <?php echo $this->tourfinder($user_id); ?> // let's use var user_step = 0 for the example
  

То, что я собираюсь написать, совершенно неверно, но это логика, которую я хотел бы использовать :

 var actual_tour_title = steps.step user_step .tour_title; // so it should give step.step0.tour_title 
  

Каков был бы правильный способ доступа к нему таким образом? Я прочитал несколько сообщений о массивах и объектах в javascript в stackoverflow и else, но я не могу понять, почему это не может быть так просто, как php.

Ответ №1:

Объекты в javascript просто хранятся в виде ассоциативных массивов, поэтому извлечение свойств так же просто, как использование имени вашего свойства в качестве ключа.

 steps["step"   user_step].tour_title;
  

Ответ №2:

Цитата:

…любое имя свойства, которое не является допустимым идентификатором JavaScript (например, имя свойства, содержащее пробел или дефис, или начинающееся с цифры), может быть доступно только с использованием обозначения в квадратных скобках.

Итак, код должен выглядеть следующим образом:

 var actual_tour_title = steps[step user_step].tour_title;
  

Ответ №3:

Вы не очень далеки от истины в своем псевдокоде. Правильный способ динамического доступа к ключу в объекте JavaScript заключается в следующем:

 var current_step = 1;
var actual_tour_title = steps['step'   current_step].tour_title;
  

Доступ к ключам можно получить либо с помощью синтаксиса dot, либо путем ссылки на ключи в виде строк:

 var obj = { data: 'I like turtles!' };
// two ways to get this
var result = obj.data; /* or */ var result = obj["data"];
  

Ответ №4:

Я не до конца понял, но я предполагаю, что если вы хотите обработать этот объект JSON в Javascript, вы можете использовать оба способа:

 steps.step0.tour_title

steps["step0"].tour_title
  

С помощью некоторой переменной вы можете сделать:

 steps["step"   user_step].tour_title