
本文详解为何在联系人查找函数中,“no such contact”必须放在 for 循环外部——关键在于避免过早终止遍历,确保完整检查所有联系人后再判定不存在。
本文详解为何在联系人查找函数中,“no such contact”必须放在 for 循环外部——关键在于避免过早终止遍历,确保完整检查所有联系人后再判定不存在。
在实现类似 freeCodeCamp Profile Lookup 这样的查找功能时,一个常见且易被忽视的逻辑陷阱是:将失败返回语句(如 return "No such contact")错误地置于循环内部的 else 分支中。这会导致函数在第一次不匹配时立即退出,根本无法检查后续联系人。
来看问题中的错误写法:
function lookUpProfile(name, prop) {
for (let n = 0; n <p>当调用 <code>lookUpProfile("Kristian", "lastName")</code> 时,循环从索引 <code>0</code>(Akira)开始执行:</p>
-
name === "Kristian"?❌ 不成立 → 立即进入else→ 返回"No such contact" - 后续
Harry、Sherlock、Kristian等所有联系人都永远不会被检查。
✅ 正确逻辑应是:
- 只在匹配成功时立即返回结果(提前退出合理);
- 循环全部执行完毕仍未匹配,才判定“不存在” —— 此判断必须位于循环之后。
标准实现如下:
function lookUpProfile(name, prop) {
for (let i = 0; i <p>进一步完善(含属性检查):</p><pre class="brush:php;toolbar:false;">function lookUpProfile(name, prop) {
for (let i = 0; i <p>? <strong>关键原则总结</strong>:</p>
-
return在循环内 = 函数立即终止,后续迭代永不执行; - 成功路径可提前
return(提升效率); - 失败路径必须等待穷尽所有可能性后再
return,即置于循环体外; - 可借助
let found = false+ 标志位辅助理解,但直接利用循环自然结束更简洁高效。
掌握这一逻辑,不仅解决 Profile Lookup 挑战,更是编写健壮查找/过滤类函数的基础准则。










