使用字符串访问JavaScript对象

时间:2016-06-16 22:13:07

标签: javascript javascript-objects

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

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

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

现在让我们假装我从网址中的参数获得object - 它以字符串形式出现......

var obj = "objectTwo";

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

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

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

我试图在没有任何运气的情况下剥离报价。

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

3 个答案:

答案 0 :(得分:2)

window是一个巧妙的技巧,但你可能会改变你的数据限制吗?

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

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

答案 1 :(得分:1)

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

如果没有,我认为除了评论中提到的@MikeC eval之外,你可以做的很多,这很少是一个好主意。

答案 2 :(得分:1)

好问题。让我们发明一种Object方法来动态访问对象属性。 method2无论您的财产位置有多深,它都需要一系列参数,并为您获得所需的价值;

在这种特殊情况下,它只是一个论点;



Object.prototype.getNestedValue()




您可以在here

看到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()