You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:05:51