0

我想访问该对象,前提是它的字符串路径以数组的形式是已知的。

1.) 有一个对象,其中

root["obj1"]["obj2"] = 1;

(一般情况下root["obj1"]...["objN"]

2.) 我只知道字符串 objectPath:

var objectPath = 'root["obj1"]["obj2"]'

3.)我不仅需要读取对象,还需要设置它的值,比如

objectPath = 2;
//so root["obj1"]["obj2"] === 2

我认为

  1. eval() 可能有一些选项,但它获取的是值,而不是变量;

  2. 可以循环遍历根的所有对象,转换为“root.obj1.obj2”(不是这种情况,因为“obj1”很容易成为“obj with spaces1”)并检查给定字符串是否等于当前对象环形。

http://jsfiddle.net/ACsPn/

相关链接: 使用点符号字符串访问对象子属性

4

1 回答 1

0

我为你写了一个函数,试图让它尽可能漂亮和可重用:

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);

如果您的根对象不在全局变量中,请将相关持有者作为第三个参数传递。

演示(打开控制台查看更改的根对象)

于 2013-05-15T11:56:49.283 回答