rsm*_*thy 10 javascript variables json nested
我有一个嵌套的Javascript对象
var data = { 'name': { 'heading': 'Name', 'required': 1, 'type': 'String' },
'profile': {
'age': { 'heading': 'Age', 'required': 0, 'type': 'Number' },
'phone': { 'heading': 'Phone', 'required': 0, 'type': 'String'},
'city': { 'heading': 'City', 'required': 0, 'type': 'String'},
},
'status': { 'heading': 'Status', 'required': 1, 'type': 'String' }
};
Run Code Online (Sandbox Code Playgroud)
在这里,我可以访问data.profile.age.type或data.name.type这些字段.没有问题如果我有动态变量名称,我可以访问如下.再一次,没问题.
f = 'profile'; data[f].age.type
Run Code Online (Sandbox Code Playgroud)
但是,这里我有变量名称,如'name','profile.age','profile.city'等,显然我无法访问它们,因为f ='profile.age'; 数据[f] .type不起作用.
谁能指导我如何以最直接和简单的方式访问它们(获取/设置)?
注意:我试过这个,它适用于get.
data.get = function(p) { o = this; return eval('o.'+p); };
f = 'profile.age'; data.get(f).name;
Run Code Online (Sandbox Code Playgroud)
虽然设置似乎不够简单.如果有更好的获取和设置解决方案,请告诉我.
你可以嵌套括号:
var a = 'name', b = 'heading';
data[a][b]; // = `Name`
Run Code Online (Sandbox Code Playgroud)
eval除非绝对必要,否则不要使用.:)至少在这种情况下,有更好的方法 - 你可以将嵌套的名称拆分成单独的部分并迭代它们:
data.get = function(p) {
var obj = this;
p = p.split('.');
for (var i = 0, len = p.length; i < len - 1; i++)
obj = obj[p[i]];
return obj[p[len - 1]];
};
data.set = function(p, value) {
var obj = this;
p = p.split('.');
for (var i = 0, len = p.length; i < len - 1; i++)
obj = obj[p[i]];
obj[p[len - 1]] = value;
};
Run Code Online (Sandbox Code Playgroud)