动态访问复杂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:

我有一个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: { 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”]是。谢谢,我发现这比链接的答案要优雅得多。