用于访问嵌套对象键的变量名

时间:2016-11-10 15:02:53

标签: javascript

道歉,如果这个标题毫无意义,但我无法找到描述这个的方法。我已经搜索了很多但是仍然可以获得访问单个级别的答案。

我有一个对象:

var o = {
    id: 1,
    customer: {
        name: 'Barry Scroggins'
    }
}

我有一个访问者:

var keyName = 'customer'

我知道我可以通过以下方式使用客户成为对象的一部分:

o[keyName] // { name: 'Barry Scroggins' }

但是,在我的申请中,我想访问'名称'客户对象的一部分,使用动态创建的变量集。所以我的应用程序会生成这个字符串:

var accessors = 'customer.name';

然后我分享了'。'获得一系列条目,但无论我尝试什么,我都无法直接访问客户名称部分。

我知道我可以这样做:o['customer']['name']但我需要动态建立这些密钥,并且可以有任意数量的级别(即customer.address.zipcode

这是可能的,还是一种可怕的,可怕的构建方式?如果是这样,你有替代方案吗?

1 个答案:

答案 0 :(得分:3)

您可以拆分路径并减少对象。



function getValue(o, path) {
    return path.split('.').reduce(function (o, k) {
        return (o || {})[k];
    }, o);
}

var o = {
        id: 1,
        customer: {
            name: 'Barry Scroggins'
        }
    },
    accessors = 'customer.name';

console.log(getValue(o, accessors));