道歉,如果这个标题毫无意义,但我无法找到描述这个的方法。我已经搜索了很多但是仍然可以获得访问单个级别的答案。
我有一个对象:
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
)
这是可能的,还是一种可怕的,可怕的构建方式?如果是这样,你有替代方案吗?
答案 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));