[英]How to access the nested property-by-name of the Javascript object when the object is accessed from the spread notation ...?
[英]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.