簡體   English   中英

Javascript從動態名稱訪問嵌套對象

[英]Javascript access nested object from dynamic name

我有這個對象:

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一樣簡單。

引用

...任何不是有效JavaScript標識符的屬性名稱(例如,具有空格或連字符或以數字開頭的屬性名稱)只能使用方括號表示法進行訪問。

因此,代碼應如下所示:

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

javascript中的對象只是存儲為關聯數組,因此檢索屬性就像使用屬性名稱作為鍵一樣簡單。

steps["step" + user_step].tour_title;

您在偽代碼中離真相不太遠。 動態訪問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"];

我沒有完全理解,但是我想如果您要使用Javascript處理此JSON對象,則可以使用兩種方式:

steps.step0.tour_title

steps["step0"].tour_title

使用一些變量,您可以執行以下操作:

steps["step" + user_step].tour_title

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM