Javascript:通过数组符号字符串访问对象(数组)

javascript: access object (array) by array notation string

本文关键字:数组 访问 对象 字符串 符号 Javascript      更新时间:2023-09-26

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

1.)存在一个对象,其中

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

(一般为root["obj1"]...["objN"])

2)。我只有字符串objectPath已知:

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

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

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

As I understand

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

  2. 可以循环通过root的所有对象,转换为"root.obj1"。

  3. (这不是情况,因为"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);

如果根对象不在全局变量中,则将相关的holder作为第三个参数传递。

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