繁体   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