我有一个javascript对象,如下所示:
var obj = { simpleName: "some name" name: { firstName: "anudeep", lastName : "rentala" }, address: { country: "XZ", state:"DF" } }
我还有另一个这样的对象:
var foo = { loc = "name.firstName" }
根据foo.loc
值,我必须访问obj
对象中的值。
在这种情况下,我需要访问obj.name.firstname
。
所以,到目前为止,我尝试过这样的事情:
var props = foo.loc.split(".");
for(var prop in props)
{
if (obj.hasOwnProperty(prop))
{
alert(obj[prop])
}
}
我的问题是,我现在只能访问name
对象的obj
属性,如何进入该属性,如name.firstName
,我知道{{1}会工作,但我如何动态地这样做?比如将其扩展为obj[name][firstName]
答案 0 :(得分:2)
很少有人遗漏,
和firstname
vs firstName
,但如果你修复了这些,那么这很有用:
var obj = { simpleName: "some name", name: { firstName: "anudeep", lastName : "rentala" }, address: { country: "XZ", state:"DF" } }
var foo = { loc: "name.firstName" }
var props = foo.loc.split(".");
var output = props.reduce( function(prev,prop) {
if (prev.hasOwnProperty(prop)) {
return prev[prop]
} else {
// however you want to handle the error ...
}
}, obj);
alert(output);
答案 1 :(得分:0)
您可以像这样修复代码:
var props = foo.loc.split(".");
var current = obj;
for(var prop in props)
{
if (current.hasOwnProperty(prop))
{
current = current[prop];
alert(current )
}
}
但是一旦你开始使用更复杂的“选择器”,这可能不会非常有用,例如,使用数组("names[2].firstname"
)。
答案 2 :(得分:0)
这是一个功能:
var obj = { simpleName: "some name", name: { firstName: "anudeep", lastName : "rentala" }, address: { country: "XZ", state:"DF" } };
var foo = { loc: "name.firstName" };
var checkObj = function(obj, props) {
var temp = obj;
for(var i = 0, len = props.length; i < len; i++) {
if(temp.hasOwnProperty(props[i])) {
temp = temp[props[i]];
}
else return false;
}
return temp;
};
console.log(checkObj(obj, foo.loc.split('.')));