javascript:按数组表示法字符串访问对象(数组)

我想访问提供的对象,只有它的数组forms的字符串路径是已知的。

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的所有对象,转换为“root.obj1.obj2”(事实并非如此,因为“obj1”很容易就是“obj with spaces1”)并检查给定的字符串是否等于当前对象环。

http://jsfiddle.net/ACsPn/

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

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

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

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

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