使用字符串访问 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()
在
工作
我定义了一些简单的对象...
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()
在