动态访问复杂Javascript对象
我有一个javascript对象,类似这样:动态访问复杂Javascript对象,javascript,Javascript,我有一个javascript对象,类似这样: var obj = { simpleName: "some name" name: { firstName: "anudeep", lastName : "rentala" }, address: { country: "XZ", state:"DF" } } var foo = { loc = "name.firstName" } 我还有另一个类似的对象: var obj = { simpleName: "some name" name:
var obj = { simpleName: "some name" name: { firstName: "anudeep", lastName : "rentala" }, address: { country: "XZ", state:"DF" } }
var foo = { loc = "name.firstName" }
我还有另一个类似的对象:
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])
}
}
var props = foo.loc.split(".");
var current = obj;
for(var prop in props)
{
if (current.hasOwnProperty(prop))
{
current = current[prop];
alert(current )
}
}
我的问题是,我现在只能访问
obj
对象的name
属性,我如何进入它,比如name.firstName
,我知道obj[name][firstName]
会起作用,但我如何动态地做到这一点呢?类似于将其扩展到obj[“prop1”][“prop2”][“prop3”]。[“propn”]
您可以像这样修复代码:
var props = foo.loc.split(".");
for(var prop in props)
{
if (obj.hasOwnProperty(prop))
{
alert(obj[prop])
}
}
var props = foo.loc.split(".");
var current = obj;
for(var prop in props)
{
if (current.hasOwnProperty(prop))
{
current = current[prop];
alert(current )
}
}
但是,一旦你开始使用更复杂的“选择器”,例如,使用数组(
“名称[2].firstname”
),这可能就没有多大用处了。与firstname
相比,缺少的、
和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);
以下是一个函数:
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('.')));
var obj={simpleName:“某个名字”,名字:{firstName:“anudeep”,lastName:“rentala”},地址:{country:“XZ”,state:“DF”};
var foo={loc:“name.firstName”};
var checkObj=功能(obj,道具){
var-temp=obj;
for(变量i=0,len=props.length;i
“foo”数组的长度决定了在变量“obj”中必须插入的深度。一个for循环就可以了。也许只需将obj指针提前到下一个值,比如obj=obj[prop]Hey@Andreas,这个问题也回答了我的问题。谢谢。谢谢,foo.loc.split(“.”);是很久以前编辑的。但这并不是真正的问题。将其扩展到obj[“prop1”][“prop2”][“prop3”]。[“propn”]是。谢谢,我发现这比链接的答案要优雅得多。