我有一个对象,它可能有也可能没有嵌套对象和属性,我想使用字符串访问它们。这是一个例子...
var obj = {
inside: {
value: 10,
furtherInside: {
value: 100
}
}
// may contain other objects, properties, etc.
};
function getObjProperty(str) {
return eval("obj." + str);
}
getObjProperty("inside.value"); // returns 10
getObjProperty("inside.furtherInside.value"); // returns 100
...但我想要一个不使用eval
的解决方案。
如何在不使用 eval 的情况下完成?我正在寻找最佳/最优/最快的解决方案。
最佳答案
怎么样
function getObjectProperty(obj, str) {
var props = str.split('.')
var result = obj;
for(var i = 0; i < props.length; i++)
result = result[props[i]];
return result;
}
此代码假定您的字符串始终有效,并且传递到 getObjectProperty
的对象具有嵌套到您的目标级别的属性,但它避免了 eval
。您可以通过检查未定义使其更健壮,但这对于您需要的东西来说可能有点矫枉过正。
测试代码,使用你的例子:
var a = {
inside: {
value: 10,
furtherInside: {
value: 100
}
}
// may contain other objects, properties, etc.
};
console.log(getObjProperty(a, "inside.value")); // prints 10
console.log(getObjProperty(a, "inside.furtherInside.value")); // prints 100
关于javascript - 如何在不使用 eval 的情况下访问定义为字符串的嵌套属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32017293/