Javascript从动态名称访问嵌套对象

时间:2014-07-04 09:08:25

标签: javascript arrays object nested

我有这个对象:

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 

以这种方式访问​​它的正确方法是什么?我已经在stackoverflow上阅读了几篇关于javascript中数组和对象的帖子,但是我无法弄清楚为什么它不能像php一样简单。

4 个答案:

答案 0 :(得分:1)

Quote

  

...任何不是有效JavaScript标识符的属性名称(for   例如,具有空格或连字符或启动的属性名称   只能使用方括号表示法访问数字。

所以代码应如下所示:

var actual_tour_title = steps[step+user_step].tour_title;

答案 1 :(得分:1)

javascript中的对象只是存储为关联数组,因此检索属性就像使用属性名作为键一样简单。

steps["step" + user_step].tour_title;

答案 2 :(得分:1)

你的伪代码中的事实并不是很远。动态访问JavaScript对象中的键的正确方法如下:

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

您可以使用点语法或将键引用为字符串来访问键:

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

答案 3 :(得分:1)

我没有完全理解,但我的猜测是,如果你想在Javascript中处理这个JSON对象,你可以使用两种方式:

steps.step0.tour_title

steps["step0"].tour_title

使用某个变量,您可以执行以下操作:

steps["step" + user_step].tour_title