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
我认为
-
eval()可能有一些选项,但它获取的是值,而不是变量;
-
一个人可以遍历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);
如果您的根对象不在全局变量中,请将相关的持有者作为第三个参数传递。
演示(打开控制台以查看更改的根对象)