var person = {
name: 'Joe',
contact: {
phone: '555'
}
}
var nameOfPerson = person['name']; //Joe
var str = 'contact.phone';
var phoneToPerson = person[str]; //undefined
这可能以某种方式吗?我得到了一些逻辑,我最终得到了一个字符串,我需要用它访问一个嵌套属性。
答案 0 :(得分:5)
您必须按周期拆分字符串,然后迭代访问每个节点。这可以通过简单的reduce
:
var value = str.split('.').reduce(function(p,prop) { return p[prop] }, person);
无论str
是否包含句点,即上述name
以及contact.phone
,上述内容均有效。
答案 1 :(得分:1)
您可以通过拆分字符串。 var person = {
name: 'Joe',
contact: {
phone: '555'
}
}
var nameOfPerson = person['name']; //Joe
var str = 'contact.phone';
var phoneToPerson = str.split('.').reduce(function(o, key) {
return o[key];
}, person);
alert(phoneToPerson);
运算符允许您按名称(和数组项索引)访问对象属性。在嵌套对象的情况下,您只需一个接一个地访问它们。
试试这样:
var dynamicType = GetDynamicType() // Gets the Dynamic Type based on runtime values
using (var db = _repositoryFactory.Create()) // Returns ORM to Use
{
var query = db.GetTable(dynamicType, "_TableName") // Returns an IQueryable<T> where T is the typeof(dynamicType)
var result = _parser.Parse(request, query) // Applies the grid transformations against the IQueryable (sorting, filtering, paging) and returns the result (raw data from server)
}
&#13;
答案 2 :(得分:0)
本地,没有。但是有办法做到这一点,比如将字符串分割为.
并递归地从person
对象下降。通过评估eval
或new Function
中的完整字符串也可以做到这一点,但出于安全原因,我强烈反对。
答案 3 :(得分:0)
试
var select = "contact.phone";
var value = person;
select.split(".").forEach(function(val){
value = value[val];
});
console.log(value);
答案 4 :(得分:0)
我知道这篇文章很老但很奇怪我看不到非常流行的“Lodash”解决方案,它允许对象嵌套属性安全。
示例:
var object = {
a: [
{
b: {
c: 3
}
}
]
};
_.get(object, 'a[0].b.c'); // → 3
对于你的例子:
var person = {
name: 'Joe',
contact: {
phone: '555'
}
}
var personPhoneProp = 'contact.phone';
_.get(person, personPhoneProp); // -> '555'