簡體   English   中英

更新JavaScript對象中的嵌套屬性

[英]Update nested attributes in a JavaScript object

我想以編程方式將“ hello”更改為“ hey”,該解決方案應可與任意數量的嵌套元素一起使用(我僅使用2個級別將其保持簡單)。

var data = {level1: {level2 : 'hello' }};

我可以訪問“數據”變量,路徑(“ level1 / level2”)和新值(“ hey”)。

我試着做:

var parents = 'level1/level2'.split('/');
var target = data;
for(var i=0; i<parents.length; i++){
   target = data[parents[i]];
}
target = 'hey';

這個想法是要扎根

target = data

然后1級深

target = data['level1'] 

...繼續

target = data['level1']['level2'] //data['level1'] === target

並修改內容

target = 'hey'

但是,當我這樣做時,似乎失去了對原始對象(數據)的引用(target = target ['level2'])。

我想我可以使用路徑構建一個字符串,然后對其進行評估:

eval("data['level1']['level2']='hey');

是否有一個更好的解決方案,不涉及eval()?

有兩個問題。 首先是您在循環內繼續使用data ,這意味着您嘗試訪問頂級鍵而不是內部鍵。 更改target = data[parents[i]];

target = target[parents[i]];

第二個是,當您更改變量target ,您並沒有更改data變量,而是target 如果您較早退出循環,則可以更新存儲為參考的對象:

for(var i=0; i<parents.length-1; i++){
   target = target[parents[i]];
}
target[parents[i]] = 'hey';

演示: http//jsfiddle.net/Lherp/

嘗試這樣的事情:

var data = {level1: {level2 : 'hello' }};
var parents = 'level1/level2'.split('/');
var target = data;
for(var i=0; i < parents.length - 1; i++){
   target = target[parents[i]];
}
target[parents[i]] = 'hey';

還是我錯過了什么?

編輯:我缺少一些東西(對不起,應該先測試一下。。)

暫無
暫無

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

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