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

时间:2013-05-15 11:38:07

标签: javascript jquery arrays object hierarchy

我想访问该对象,只提供它的数组形式的字符串路径。

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”)并检查是否给定了字符串等于循环中的当前对象。

  3. http://jsfiddle.net/ACsPn/

    相关链接: Access object child properties using a dot notation string

1 个答案:

答案 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)