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

使用for循环与条件运算符查找数组对象属性失败,求原因

问题:条件运算符实现lookUpProfile函数失效原因分析

需求说明

需要实现一个名为lookUpProfile的函数,遍历以下包含多个对象的contacts数组,根据指定条件返回对应属性值:

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"],
  },
];

条件要求

  • 若姓名存在于contacts数组中,需检查该对象是否包含指定prop;
  • 若prop不存在,返回"No such property";
  • 若姓名不存在,返回"No such contact"。

问题代码

此前用if-else if可成功实现功能,但改用条件运算符编写的代码无法正常工作:

function lookUpProfile(name, prop) {
  for (let i=0;i<contacts.length;i++) {
      return contacts[i].firstName===name ? contacts[i].hasOwnProperty(prop) ? contacts[i][prop]
        : "No such property"
        : 0
  }
  return "No such name";
}

失效原因

代码存在两个核心问题:

  1. 循环提前终止:for循环的第一次迭代就执行了return语句,无论当前对象是否匹配目标姓名,都会直接返回结果。这导致循环仅检查第一个元素就结束,完全不会遍历后续对象。
  2. 不匹配时的返回逻辑错误:当当前对象的firstName不等于目标name时,代码返回了0,而非继续循环检查下一个对象,直接中断了遍历流程,无法找到后续可能匹配的对象。

修正后的代码

混合if与条件运算符(可读性更高)

仅在找到匹配姓名的对象时,用条件运算符处理属性判断,否则继续循环;遍历结束未找到匹配对象时返回指定结果:

function lookUpProfile(name, prop) {
  for (let i = 0; i < contacts.length; i++) {
    if (contacts[i].firstName === name) {
      return contacts[i].hasOwnProperty(prop) ? contacts[i][prop] : "No such property";
    }
  }
  return "No such contact";
}

纯条件运算符实现

如果必须完全使用条件运算符,可调整逻辑,仅在匹配时执行返回,不匹配时让循环继续:

function lookUpProfile(name, prop) {
  for (let i = 0; i < contacts.length; i++) {
    contacts[i].firstName === name && 
      (return contacts[i].hasOwnProperty(prop) ? contacts[i][prop] : "No such property");
  }
  return "No such contact";
}

内容的提问来源于stack exchange,提问作者Juan Yeremia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 19:54:26