假设我们得到了一个javascript对象

var json = {
  abc: 1,
  def: 2,
  ghi: [3, 4]
};


而且我们想访问其成员,例如给定以下字符串数组

var str_arr = ["json['abc']", "json['ghi'][1]"];


我想在不使用eval的情况下获得以下结果(我正在构建Google Chrome扩展程序)

var str_res = [1, 4];


这可能吗?我尝试做窗口,但是它不起作用(或者可能我不知道怎么做)。谢谢!

最佳答案

我不建议使用自定义方法遍历整个对象,但是如果您确实不能直接访问该对象,则可以使用递归函数并传递要打开的键。这可能会给您更多所需的动态感。

码:

function readObjectValue(obj, key, defaultValue) {
    function __readObjectValueInternal(obj, keyParts, defaultValue) {
        if (!obj.hasOwnProperty(keyParts[0])) {
            return defaultValue;
        }

        var readValue = obj[keyParts[0]];

        if (typeof(readValue) !== 'object') {
            return readValue;
        }

        return __readObjectValueInternal(readValue, keyParts.slice(1), defaultValue);
    };

    return __readObjectValueInternal(
        obj,
        (typeof(key) === 'string' ? key.split(/\./g) : key),
        defaultValue
    );
}


用法:

var json = {
  abc: 1,
  def: 2,
  ghi: [3, 4]
};

console.log( readObjectValue(json, 'abc')            ); // 1
console.log( readObjectValue(json, 'ghi.1')          ); // 4
console.log( readObjectValue(json, 'ghi.2')          ); // undefined
console.log( readObjectValue(json, 'ghi.3', null)    ); // null
console.log( readObjectValue(json, ['def', 0], null) ); // 2

关于javascript - 如何通过字符串访问对象成员?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34153180/

10-11 22:15
查看更多