javascript - 如何通过字符串访问对象成员?

标签 javascript

假设我们有一个 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/

相关文章:

javascript - 计算具有多个变量的旅程成本总价

javascript - Typescript export const foo 与 export default { foo }

php - 让javascript函数基于PHP变量返回状态的好方法?

javascript - 如何制作一个不重置值的点击计数器

javascript - 在动态加载 html 时禁用 href

javascript - Jquery .load() 回调未触发

javascript - 我正在尝试迭代并比较两个不同的二维数组

javascript - Angular 4 : How to include external js libraries?

javascript - 循环中的变量范围

javascript - 如何在函数中定义属性?