FreeCodeCamp基础JS Profile Lookup代码无法通过检测求助
问题排查与修复方案
嘿,我帮你揪出了导致"Bob"相关用例失败的两个关键问题,咱们一步步来看:
1. 全局变量foundName的污染坑
你把foundName定义在了函数外面,这就导致它的值会在函数的多次调用之间“记住”之前的结果。比如如果之前调用过lookUpProfile找过一个存在的联系人(比如"Akira"),foundName会被设为1,之后再调用找"Bob"时,这个值还是1,最后判断foundName < 1就不成立,自然不会返回"No such contact"。
2. 循环内的逻辑顺序绕远路了
你的循环里每遍历一个联系人就做一堆判断,但其实完全没必要单独维护foundName变量——咱们可以先把匹配姓名的联系人找出来,再统一处理属性的问题,逻辑会清晰很多。
修复后的代码
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(name, prop) { // Only change code below this line let foundContact = null; // 先遍历找到匹配姓名的联系人 for (var i = 0; i < contacts.length; i++) { if (contacts[i].firstName === name) { foundContact = contacts[i]; break; // 找到就停止遍历,省点性能 } } // 再分情况处理 if (!foundContact) { return "No such contact"; } else if (foundContact.hasOwnProperty(prop)) { return foundContact[prop]; } else { return "No such property"; } // Only change code above this line } var ans = lookUpProfile("Bob", "number"); console.log(ans); // 现在会正确输出"No such contact"
修复思路拆解
- 把
foundContact放在函数内部,每次调用函数都会重新初始化,彻底避免全局变量的污染问题。 - 先完成“找联系人”的动作,再处理“查属性”的逻辑,流程更直观,不会在循环里绕晕。
- 换成
===严格相等运算符,比==更严谨,避免一些隐式类型转换的奇怪问题。
这样修改后,所有测试用例应该都能顺利通过啦!
内容的提问来源于stack exchange,提问作者DevB1
相关产品推荐
相关产品推荐

