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

三元语句返回数据异常,请求排查lookUpProfile函数问题

问题排查与修复方案

我来帮你梳理下代码里的问题,以及怎么修复它:

你的代码核心问题

  1. forEach循环的局限性:forEach是用来遍历数组执行副作用的,它不会返回任何值,你在循环里写的三元表达式只是计算了结果,但完全没有把这个结果传递出去。循环结束后,函数直接执行最后一行的return "no such contact",所以不管输入什么,最终都会返回这个字符串。
  2. 缺少流程控制:找到匹配的联系人后,你需要停止遍历并处理属性检查,但forEach没办法中途终止循环,这会导致不必要的遍历。
  3. 字符串大小写不匹配需求:你返回的"no such property"和"no such contact"是全小写的,但题目要求的是首字母大写的"No such property"和"No such contact"。

修复后的代码

我们可以用find方法快速定位到匹配的联系人,然后按逻辑分支处理:

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){
  // 先找到匹配firstName的联系人
  const targetContact = contacts.find(contact => contact.firstName === name);
  
  // 分支1:没有找到匹配的联系人
  if (!targetContact) {
    return "No such contact";
  }
  
  // 分支2:找到了联系人,检查属性是否存在
  if (targetContact.hasOwnProperty(prop)) {
    return targetContact[prop];
  } else {
    return "No such property";
  }
}

// 测试调用
console.log(lookUpProfile("Akira", "likes")); // 会返回 ["Pizza", "Coding", "Brownie Points"]

代码逻辑说明

  • 用find方法遍历数组,找到第一个firstName匹配name的联系人对象,找不到的话返回undefined。
  • 先判断是否找到联系人:没找到直接返回"No such contact"。
  • 找到联系人后,用hasOwnProperty检查目标属性是否存在:存在就返回属性值,不存在返回"No such property"。

如果你坚持想用循环(比如for循环)来实现,也可以这样写:

function lookUpProfile(name, prop){
  for (let i = 0; i < contacts.length; i++) {
    const contact = contacts[i];
    if (contact.firstName === name) {
      // 找到联系人,检查属性
      return contact.hasOwnProperty(prop) ? contact[prop] : "No such property";
    }
  }
  // 循环结束都没找到匹配的联系人
  return "No such contact";
}

这个写法的好处是,找到匹配的联系人后可以直接return终止函数,避免多余的循环。

内容的提问来源于stack exchange,提问作者Angela Inniss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:52:20