添加else if分支后,JS联系人查询函数无法识别数组中存在的值?
问题原因分析与修复
错误根源
你添加的else if分支存在两个致命问题:
- 判断逻辑完全错误:
contacts[i].firstName[name]是无效写法。contacts[i].firstName是字符串,方括号访问字符串时只能用数字索引,你传入字符串name("Kristian")必然返回undefined,导致第一次循环匹配"Akira"时就触发return "No such contact",函数直接终止,根本没机会遍历到后面的"Kristian"对象。 - 提前终止循环:就算条件写对,也不能在循环内部的分支里直接返回"No such contact"——必须遍历完所有联系人,确认没有匹配项后,再返回这个结果。
修正后的代码
删除错误的else if分支,在循环结束后添加返回语句即可:
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) { for (let i = 0; i < contacts.length; i++) { if (contacts[i].firstName === name) { if (contacts[i].hasOwnProperty(prop)) { return contacts[i][prop]; } else { return "No such property"; } } } // 遍历完所有联系人未匹配,才返回该提示 return "No such contact"; } lookUpProfile("Kristian", "lastName"); // 返回 "Vos"
额外优化提示
可以把var换成let(块级作用域更安全),属性存在性判断也可以用可选链简化,但核心逻辑保持上述写法即可满足需求。
内容的提问来源于stack exchange,提问作者Armando Barradas Rodríguez
相关产品推荐
相关产品推荐

