我想访问该对象,只提供它的数组形式的字符串路径。
1。)有一个对象,其中
root["obj1"]["obj2"] = 1;
(通常情况下为root["obj1"]...["objN"]
)
2。)我只有字符串objectPath已知:
var objectPath = 'root["obj1"]["obj2"]'
3。)我不仅要读取对象,还要设置它的值,如
objectPath = 2;
//so root["obj1"]["obj2"] === 2
据我了解
eval()可能有一些选项,但它获取的是值,而不是变量;
可以遍历root的所有对象,转换为“root.obj1.obj2”(事实并非如此,因为“obj1”很容易就是“obj with spaces1”)并检查是否给定了字符串等于循环中的当前对象。
相关链接: Access object child properties using a dot notation string
答案 0 :(得分:1)
我为你写了一个函数,试图让它尽可能漂亮和可重复使用:
function setProp(path, newValue, holder) {
var t = path.split(/[\[\]"]+/).filter(function(v){return v}),
l = t.pop(), s, o = holder || window;
while (s = t.shift()) o = o[s];
o[l] = newValue;
}
你这样使用它:
setProp('root["obj1"]["obj2"]', 2);
如果您的根对象不在全局变量中,请将相关的持有者作为第三个参数传递。
Demonstration (open the console to see the changed root object)