使用字符串访问 JavaScript 对象

Accessing a JavaScript object using a string

我定义了一些简单的对象...

var objectOne = {
    settings: {
        name: "object one"
    }
}

var objectTwo = {
    settings: {
        name: "object two"
    }
}

现在让我们假设我从 URL 中的一个参数得到了 object - 它以字符串形式出现...

var obj = "objectTwo";

如何使用此 obj 变量访问 objectTwo.settings

我无法执行以下操作,因为 obj 是一个字符串:

var settings1 = obj.settings;
var settings2 = [obj].settings; // also doesn't work

我尝试去掉引号,但没有成功。

如何使用字符串访问顶级对象?

如果它在全局命名空间中,您可以使用 window[obj].settings

如果不是,我认为除了评论中提到的@MikeC eval,你无能为力,这很少是个好主意。

window 是一个绝妙的技巧,但是您可以更改数据结构吗?

var objects = {
  objectOne: {
    settings: {
        name: "object one"
    }
  },
  objectTwo: {
    settings: {
        name: "object two"
    }
  }
}

var id = "objectOne";
alert(objects[id].settings.name);

好问题。让我们发明一个 Object 方法来动态访问对象属性。 Object.prototype.getNestedValue() 不管你的 属性 位于多深,它都会按顺序进行一系列参数,并为你得到想要的值;

在这种特殊情况下,它只是一个参数;

Object.prototype.getNestedValue = function(...a) {
  return a.length > 1 ? (this[a[0]] !== void 0 && this[a[0]].getNestedValue(...a.slice(1))) : this[a[0]];
};
var objects = {
  objectOne: {
    settings: {
        name: "object one"
    }
  },
  objectTwo: {
    settings: {
        name: "object two"
    }
  }
},
        obj = "objectTwo";
     result = objects.getNestedValue(obj);
console.log(JSON.stringify(result));

你可以看到 getNestedValue() 和它的双胞胎 setNestedValue()

工作