【问题标题】:Navigating through object dynamically动态浏览对象
【发布时间】:2017-01-22 14:07:18
【问题描述】:

所以我有一个看起来像这样的对象:

var computer={
"Home":{
    "Applications":{
        "Desktop":{

        },
        "Documents":{

        },
        "Downloads":{

        },
        "Library":{

        },
        "Movies":{

        },
        "Music":{

        },
        "Pictures":{

        }
    }
},
"Library":{

},
"Downloads":{

},
"Files":{

},
"Devices":{
    "USB":{

    },
    "Hard_Drive":{

        }

    }
}

我还有一个输入框,它应该接收用户对location 的输入。然后使用console.log(computer[location]); 查找该位置应该会显示该对象的所有子对象。所以基本思路是这样的:

var location = document.getElementById("inputId");
console.log(computer[location]);

我可以使用哪些模式来完成这项工作?我也愿意改变将计算机作为对象或任何其他更改的想法。我只需要完成这项工作。提前致谢。

【问题讨论】:

  • document.getElementById("inputId").value;...访问.value属性...
  • 但即便如此,如果我有这个 var obj={ Home:{ Value:"value is value" } } var val="Home"; var th=String(obj[val]);控制台.log(th);它仍然返回对象 Object,而不是事物的实际值
  • 有什么?从对象访问值是你的问题?
  • obj[val] 包含另一个Object,删除Sting 并检查控制台...
  • @Rayon 是的,从对象访问值是我不能做和想做的。如果我尝试在计算机内的对象中获取某物的值,它会返回 undefined。

标签: javascript object


【解决方案1】:

我想我终于明白了。此代码将遍历对象,如果找到字符串,则将值设置为“目标”变量。

        var obj = {
            name: "Darin",
            age: 30,
            occupation: "Programmer",
            employers: {
                burgerKing:{
                    name: "Burger King",
                    startDate: "2001",
                    endDate: "2006"                 
                }
            }
        }   



        var target = null; //the final value is stored here

        function finder(obj, key){

            $.each(obj, function(k,v){

                if(typeof v == "object"){
                    finder(v, key); 
                }
                else{
                    if(k == key) target = v;
                }           
            });     
        }


        finder(obj, "startDate");

【讨论】:

  • i 和 v(参数)是做什么的?参数 i 是输入的值, v 是根据我的理解调用的函数。但 i 从未使用过,并且 v 不是函数。
  • $('button').click(function(i,v) i: 事件,v: 在这种情况下它什么也不做,我从另一个项目复制/粘贴它。这是文档在 jQuery 点击时:@9​​87654321@
  • 不完全是。在“每个”函数中,您仍然需要 v,因为它具有作为对象键的值:$(val).each(function(i,v)。您可以从 click 函数中删除 v,如上所述。在您的小提琴中,似乎代码失败了,因为每个都缺少 v。
  • 这是一个有效的小提琴:jsfiddle.net/Darin_Cardin/8b2fo9s9/2 如果这能解决您的问题,请告诉我。
  • 不,我想做的是用户输入一个值(例如 startdate,我的对象中不会有任何同名的东西),只需输入“startdate”(不带引号)它会返回它是否嵌套了一百万次。
猜你喜欢
  • 1970-01-01
  • 2011-04-14
  • 2010-09-13
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多