0

在运行下面的代码时,没有任何函数调用,我会立即得到这个输出

["1122","3rd St","Seattle","WA","92838"]

解决此代码的最接近的线程是需要解释:联系人列表中的对象组织(Javascript,Codecademy),但它并没有完全解决我的问题。

我确信我向对象添加键值对的方式会以某种方式产生这个输出,但我似乎无法解释为什么,特别是在运行代码时,没有包含函数调用。

当实际尝试调用搜索(例如搜索(“史蒂夫”))时,它会失败,但它会在搜索(“比尔”)上工作。我认为它可能与 javascript 控制台有关,但我使用 Chrome 的控制台进行了检查,结果相同。任何帮助将非常感激。

var friends={};
friends.bill = {};
friends.steve={};
friends.bill["firstName"]="Bill";
friends.bill["lastName"]="Gates";
friends.bill.number="333.222.3937";
friends.steve["firstName"]="Steve";
friends.steve.lastName="Ballmer";
friends.steve["number"]="829.383.3939";
friends.bill["number"]="232.8392.2382"
friends.bill.address=['5353','Cook Ave','Bellevue','CA','94838']
friends.steve.address=['1122','3rd St','Seattle','WA','92838']


    var search=function(name)
    {
    for(var i in friends){
        if (name==i["firstName"])
    {
        console.log(friends[i])
        return friends[i]
    }
        else{
            return "no match"
        }

    }
}
4

2 回答 2

2

尝试改变:

for(var i in friends){
    if (name==i["firstName"])
        ...

for(var i in friends){
    if (name == friends[i]["firstName"])
        ...

你的意思是这样的:

for(var i in friends){
    if( name == i ) { //i would be either "bill" or "steve" and check against name variable
        console.log("Data for:" + i + " firstname is:" + friends[i]["firstName"]);
    }
}
于 2013-09-12T04:42:41.967 回答
0

您会看到以下输出:

["1122","3rd St","Seattle","WA","92838"]

因为它是当前存储在 $_ 中的内容(大多数基于浏览器的 JS 解释器会在提示符下吐出 $_ 中的内容)。

$_ 是最后一个评估表达式的值,在您的情况下是:

friends.steve.address=['1122','3rd St','Seattle','WA','92838']

“var search ...”实际上是一个声明,因此不会存储在 $_ 中。

此外,您的搜索功能应该如下所示:

var search = function(name) {
  for(var i in friends) {
    if (name.toLowerCase() == friends[i]["firstName"].toLowerCase()) {
      console.log(friends[i])
      return friends[i]
    }
  }
  return "no match";
};

@cherniv 可能在将退货移出时击败了我。

于 2013-09-12T04:57:44.367 回答