尧图精选

12 行代码跑通 freeCodeCamp 的 Profile Lookup:对象数组查找与括号属性访问

🕒 发布时间:2026/9/10 16:50:36 📁 来源:尧图网络
12 行代码跑通 freeCodeCamp 的 Profile Lookup对象数组查找与括号属性访问【免费下载链接】TVBoxOSCTVBoxOSC - 一个基于第三方项目的代码库用于电视盒子的控制和管理。项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC在 freeCodeCamp 的 Profile Lookup 挑战里你要按姓名在对象数组里查联系人并返回他的某个属性。可如果凭直觉写lookUpProfile(Akira, likes)完全可能返回undefined。本文用这道对象数组查找题讲清括号属性访问的用法、两种缺失语义的处理12 行代码全部讲透——适合正在刷 JS 基础练习、又被这类函数题卡住的你。先查人、再查属性把题面翻译成判定表函数签名是固定的lookUpProfile(name, prop)name是名字字符串prop是属性名字符串。被查询的数据是contacts对象数组每个元素代表一个人const contacts [ { firstName: Akira, lastName: Laine, number: 0543236543, likes: [Pizza, Coding] }, { firstName: Kristian, lastName: Vos, number: unknown, likes: [JavaScript, Gaming] }, // ... 其余两个略 ]; function lookUpProfile(name, prop) { // Only change code below this line }注意字段是异构的number是字符串likes是数组各对象拥有的属性集合也不完全一样。判定逻辑由此拆成三条分支成功分支某个联系人的firstName与name相等且prop确实是这个对象的属性 → 原样返回该属性的值字符串就返回字符串数组就返回数组。失败分支 A缺人整个数组里没有任何firstName匹配name→ 返回No such contact此时prop是否合法都不重要。失败分支 B缺属性人找到了但prop不在那个对象上 → 返回No such property。关键在后半句两种失败语义不同优先级固定。先判人人查不到就直接报缺人人命中之后才轮到判属性。顺序一颠倒lookUpProfile(Bob, potato)就会被判成属性不存在而官方预期是人不存在。两种写法一次讲透官方短路与显式检查官方版for...in 加 ||freeCodeCamp 的参考答案用for...in遍历下标再用一个||兜底function lookUpProfile(name, prop) { for (let i in contacts) { // i 依次取 0、1、2、3 if (contacts[i].firstName name) { // 括号访问读取 prop 指向的属性取不到就用 || 兜底 return contacts[i][prop] || No such property; } } // 整轮遍历没命中才说明这个人不在数组里 return No such contact; }为什么return No such contact要放在循环外面因为必须把整个数组走完、firstName一个都没对上才能下结论人不在通讯录里若第一个对象没匹配就报缺人等于把后面的数据全部误判为不存在。而一旦命中就立刻return先查人、后查属性的顺序天然被保住。这里用到的括号属性访问就是obj[key]里key为变量时的读法——prop是运行时传进来的键名只有括号语法才能解释它。⚠️边界提示contacts[i][prop]在属性不存在时读到undefined||顺势换成提示语。可当合法值本身就是假值——比如age: 0、flag: false、空字符串——||会把正常返回值一并吞掉误报 No such property。官方测试数据里恰好都是真值所以能过但这个隐患是真实存在的。更稳的版本for...of 加 hasOwnPropertyfunction lookUpProfile(name, prop) { for (const contact of contacts) { if (contact.firstName name) { // 只问属性在不在不问值是不是真值 if (Object.prototype.hasOwnProperty.call(contact, prop)) { return contact[prop]; // 0、false、空串都原样返回 } return No such property; } } return No such contact; }与官方版相比只有两处差异直接遍历对象本体而不是下标以及把||捷径换成一次显式的hasOwnProperty.call检查。hasOwnProperty判断对象是否拥有某个自有属性只关心在不在不关心值真假于是age: 0这类假值会被如实返回 0而官方版会把它误报成缺属性。两者都能通过全部官方断言但后一种在语义上更诚实。四个高频错误错误代码改正确代码点语法取属性contact.prop→contact[prop]。点语法读的是字面键prop永远是undefined变量只能经括号解释为键名。判空顺序写反先查prop是否合法再找人 → 人命中之后才查prop。否则lookUpProfile(Bob, potato)会错报 No such property。对整数组做统一 prop 校验拿prop去挨个校验所有联系人 → 只对命中的那个对象校验。字段各不一致有效性只能以实际匹配到的对象为准。把 likes 拼成字符串contact.likes.join(, )→contact.likes。断言校验返回值是数组join 一转成字符串就挂了。在 freeCodeCamp 仓库里验证它 挑战文件curriculum/challenges/english/blocks/basic-javascript/5688e62ea601b2482ff8422b.md的 front-matter 记录了challengeType: 1浏览器控制台函数题与dashedName: profile-lookup。其中的--hints--段落就是断言脚本在线编辑器运行时它会拿你的补全函数逐条执行 assert--seed-contents--段落则是你在编辑器里看到的初始代码只有注释标出的区域开放编辑。回到自己的控制台验证把||换成hasOwnProperty.call再跑一遍全部六条断言确认行为一致。手工给 contacts 加一个number: 0的联系人分别调用两种写法看一个返回 No such property、另一个返回 0。用contacts.find(c c.firstName name)加可选链重写循环体验函数式风格。现在就把这道题做掉然后到空文件里手写本文的三种版本——当你能说清每个版本会吞掉哪些假值时这道题才算真正属于你。【免费下载链接】TVBoxOSCTVBoxOSC - 一个基于第三方项目的代码库用于电视盒子的控制和管理。项目地址: https://gitcode.com/GitHub_Trending/tv/TVBoxOSC创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →