【发布时间】:2017-08-06 14:14:31
【问题描述】:
当我在 freeCodeCamp 中做一些 js 练习时,我遇到了这个挑战。 我们的联系人列表中有一组代表不同人的对象。
已经为您预先编写了一个将 firstName 和一个属性 (prop) 作为参数的 lookUpProfile 函数。
该函数应检查 firstName 是否为实际联系人的名字,并且给定属性 (prop) 是否为该联系人的属性。
如果两者都为真,则返回该属性的“值”。
如果 firstName 不对应任何联系人,则返回“No such contact”
如果 prop 不对应于任何有效属性,则返回“No such property” 这是我的完成代码:
//Setup
var contacts = [
{
"firstName": "Akira",
"lastName": "Laine",
"number": "0543236543",
"likes": ["Pizza", "Coding", "Brownie Points"]
},
{
"firstName": "Harry",
"lastName": "Potter",
"number": "0994372684",
"likes": ["Hogwarts", "Magic", "Hagrid"]
},
{
"firstName": "Sherlock",
"lastName": "Holmes",
"number": "0487345643",
"likes": ["Intriguing Cases", "Violin"]
},
{
"firstName": "Kristian",
"lastName": "Vos",
"number": "unknown",
"likes": ["Javascript", "Gaming", "Foxes"]
}
];
function lookUpProfile(myName, myProp){
// Only change code below this line
for (var i = 0; i < contacts.length; i++){
if (contacts[i].firstName === myName){
if (contacts[i].hasOwnProperty(myProp)){
return contacts[i][myProp];
} else {
return "No such property";
}
} else {
return "No such contact";}
}
// Only change code above this line
}
// Change these values to test your function
lookUpProfile("Kristian", "lastName");
但它只返回“没有这样的联系”,我的猜测是第一个 if 没有评估为真。但是,即使是网站的答案也是一样的。第一次比较真的有什么问题吗?这是什么?
【问题讨论】:
-
尝试逐行评估您的代码:您对第一项执行
if (contacts[i].firstName === myName){。它与"Kristian"不匹配,因此您转到相应的else分支:return "No such contact";。你从函数中返回。所以你甚至不检查第一个以外的元素。 -
我现在明白了,我猜它没有返回 true,因为它只检查第一个数组,因为我给出了一个 else 语句,说如果它不匹配第一个比较的属性,它应该返回false 在返回 false 之前应该首先检查所有数组。我所要做的就是将 else 移到另一行。有趣,谢谢提示。