0

我正在使用 freeCodeCamp javascript 并陷入“配置文件查找”练习,因为我忘记了 .hasOwnProperty() 函数,但我仍然不确定为什么我的原始函数不起作用。我将保留给定数组的一部分以供参考。

//Setup
var contacts = [
    {
        "firstName": "Akira",
        "lastName": "Laine",
        "number": "0543236543",
        "likes": ["Pizza", "Coding", "Brownie Points"]
    },
    {
        "firstName": "Harry",
        "lastName": "Potter",
        "number": "0994372684",
        "likes": ["Hogwarts", "Magic", "Hagrid"]
    };


function lookUpProfile(name, prop){
// Only change code below this line
for(let x in contacts){
  if(name === contacts[x].firstName){
    for(let y in contacts[x]){
      if(prop === y){
        return contacts[x][prop]; 
      } else {return "No such property";}
    }
  } 
 } return "No such contact";
// Only change code above this line
}

// Change these values to test your function
lookUpProfile("Akira", "likes")

当我离开我的

else {return "No such property";}

行它可以工作,但无论“prop”输入是什么,否则只会返回“没有这样的属性”。

4

3 回答 3

1

在您的代码中:

for(let y in contacts[x]){
  if(prop === y){
    return contacts[x][prop]; 
  } else {return "No such property";}
}

例如,如果prop是,则循环的第一轮可能等于。是假的,所以我们.likesyfirstNameif ("likes" === "firstName")return "No such property";

正如您通过删除 发现的那样else,您要做的是测试每个键,然后在结束时返回“No such property”:

for(let y in contacts[x]){
  if(prop === y){
    return contacts[x][prop]; 
  }
}
return "No such property";

顺便说一句,请使用更多的空白空间 - 在一行中将内容混合在一起更难阅读。

于 2018-06-19T00:03:24.703 回答
1

您的问题是循环中的 if else 语句:

if(prop === y){
  return contacts[x][prop]; 
} else {
  return "No such property";
}

根据您的代码,您只检查联系人对象的第一个属性,因为如果当前检查的属性与正在查找的属性不匹配,则 if else 语句不返回任何属性。这种情况使它不会检查其余属性,而只检查第一个属性(无论它是否正确)

要解决此问题,请将您的 return 语句移动到用于检查属性的循环的末尾:

for(let x in contacts){
  if(name === contacts[x].firstName){
    for(let y in contacts[x]){
      if(prop === y) return contacts[x][prop]; 
    }
    return "No such property";
  }
}

这样,如果您完成循环并且仍然没有找到有效的属性,它将正确返回“没有这样的属性”消息,反之亦然,如果您找到了正确的属性,它将返回属性值

于 2018-06-19T00:05:46.063 回答
0

只需将内部循环中 if 条件的 else 部分移出该循环即可。因为,代码执行在比较第一个属性之后立即返回。

于 2018-06-19T00:07:45.880 回答