2

我正在尝试运行一些 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;
            }
        }
    };

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

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

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

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

我有这个链接到一个 html 文档,有一个

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

但是代码不起作用。有没有人有什么建议?

感谢答案,我现在可以正常工作了。但我认为它只会在屏幕上打印“Hello”,而不是 { name: “Hello”}。

4

3 回答 3

3

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

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

在这里拉小提琴。

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

于 2013-08-12T21:59:40.733 回答
1
people.a.name

如果要按名称访问项目,则需要使用括号运算符。使用people.a字面意思是搜索名为“a”的成员,而不是与 的值同名的成员a

尝试:

people[a].name

反而。

于 2013-08-12T21:59:59.857 回答
0

您的代码中有 4 个错误:

  • 替换people.apeople[a]
  • 替换innerHTML()innerHTML
  • 像这样设置 HTML:document.getElementById("p").innerHTML = print.name;
  • 如上一个答案,按名称搜索

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

于 2013-08-12T22:07:25.213 回答