【发布时间】:2021-12-31 15:11:32
【问题描述】:
我有一行代码的问题,似乎没有按预期执行:
if (name === contacts[i].firstName && contacts[i].hasOwnProperty(prop)){
return contacts[i][prop];
它应该检查 name 是否与对象的 firstName 匹配,以及对象是否具有 prop 属性 - 如果两者都为 true,则返回该属性。但是,运行测试时似乎跳过了这段代码,因为每个结果都给了我“没有这样的联系”的答案。
// Setup
const 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(name, prop) {
// Only change code below this line
for (let i = 0; i < contacts.length ; i++){
if (name === contacts[i].firstName && contacts[i].hasOwnProperty(prop)){
return contacts[i][prop];
}else if (name !== contacts[i]["firstName"]){
return "No such contact"
}else if (prop !== contacts[i]["prop"])
return "No such property";
}
// Only change code above this line
}
const search = lookUpProfile("Akira", "likes");
console.log(search);
下面有一个使用嵌套 IF 语句的解决方案,但我想知道为什么我最初尝试解决它的方法不起作用。
function lookUpProfile(name, prop) {
for (let x = 0; x < contacts.length; x++) {
if (contacts[x].firstName === name) {
if (contacts[x].hasOwnProperty(prop)) {
return contacts[x][prop];
} else {
return "No such property";
}
}
}
return "No such contact";
}
完整的问题可以在这里访问: https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/profile-lookup
【问题讨论】:
-
"这段代码似乎被跳过了" - 不,它没有被跳过。但是您的第一个 sn-p 只检查第一个配置文件,并且在循环的第一次迭代中从函数中检查
returns,从不查看其他配置文件。lookUpProfile("Akira", "likes");可能有效,但lookUpProfile("Harry", "likes");无效。 -
感谢您的回复 - 为什么它不通过其余的迭代?由于每次迭代都基于 for 循环中的 i 值,我不确定它为什么会停在 1 处。此外,
lookUpProfile("Akira", "likes");似乎也没有返回任何内容。 -
return退出循环和函数,立即将指定的值返回给调用者,而不运行任何剩余的代码。您可以删除两个else子句并分别处理它们,就像您在第二个示例中所做的那样。 -
如果其中任何一个都不满足,则继续使用
else if子句,其中一个肯定会return,因为它们是您已经测试过的逆条件(并且至少其中一个失败了)。 -
@DCoderT 啊,我没有发现第二个错误。
else if (prop !== contacts[i]["prop"]) {可能只是else {,因为prop始终是一个字符串,而contacts[i].prop始终是undefined(您的contacts都没有名为"prop"的属性)所以if始终匹配。
标签: javascript if-statement nested operator-keyword