javascript - 如何在不使用 eval 的情况下访问定义为字符串的嵌套属性?

标签 javascript

我有一个对象,它可能有也可能没有嵌套对象和属性,我想使用字符串访问它们。这是一个例子...

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/

相关文章:

javascript - 创建一个数组并排除以 : 结尾的对象

javascript - 下面的变量分配是如何工作的?

javascript - 提供 react 后如何在移动设备上隐藏 react 文本

javascript - 单击表 'checking' 复选框中的行?

javascript - 如何在three.js中弯曲圆柱体?

javascript - amstock 图表 x 轴标签的单击事件

javascript - 在 Typescript 中将文本分配给局部变量

javascript - Angular JS ng-model 传递给函数 undefined object

javascript - 如何使用 ramda.js 将对象数组转换为整数数组并从这些对象中提取值?

javascript - node.js 时间模块时区列表