在javascript中访问嵌套对象

时间:2013-08-12 21:56:51

标签: javascript html json

我正在尝试运行一些JavaScript,但它无效。

我有一个具有两个属性的对象,这两个属性也是对象。

var people = {
        me: {
            name: "Hello"
        },

        molly: {
            name: "Molly"
        }
    };

我正在尝试创建一个使用for / in语句和if语句来列出人员属性的函数。

var search = function (x) {
        for (var a in people) {
            if (people.a.name === x) {
                return people.a;
            }
        }
    };

因此该函数循环遍历people的属性并将它们分配给变量a。因此,people.a将等于人的财产。然后该函数返回属性(people.a)。

因此,如果我输入我作为参数x,该函数是否应该返回me对象的属性?我把这段代码放在jsLint和jsHint中并且它通过了,但我决定删除更正因为它们没用。

然后我想在浏览器中打印对象属性:

var print = search("me");
document.getElementById("p").innerHTML(print);

我将此链接到一个html文档,其中

标记为“p”。我已经在html文档中测试了javascript,所以我知道javascript文档已正确链接。

但代码不起作用。有没有人有任何建议?

由于答案,我现在正在工作。但我认为它只会在屏幕上打印“Hello”,而不是{name:“Hello”}。

3 个答案:

答案 0 :(得分:3)

您需要使用people[a],而不是people.a。前者查找具有存储在a中的值名称的属性;后者寻找一个名为“a”的财产,当然不存在。

for (var a in people) {
    if (people[a].name === x) {
        return people[a];
    }
}

Fiddle here.

另外,我认为你的意思是search("Hello"),对吧?如果没有,那么它只是var search = function(x) { return people[x]; }

答案 1 :(得分:1)

people.a.name

如果要按名称访问项目,则需要使用括号运算符。使用people.a实际上是在搜索名为“a”的成员,而不是名称与a的名称相同的成员。

尝试:

people[a].name

代替。

答案 2 :(得分:0)

代码中有4个错误:

  • people.a替换为people[a]
  • innerHTML()替换为innerHTML
  • 像这样设置HTML:document.getElementById("p").innerHTML = print.name;
  • 与之前的回答一样,按名称搜索

代码:http://jsfiddle.net/nabil_kadimi/vVSPG/