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

添加else if分支后,JS联系人查询函数无法识别数组中存在的值?

问题原因分析与修复

错误根源

你添加的else if分支存在两个致命问题:

  1. 判断逻辑完全错误:contacts[i].firstName[name]是无效写法。contacts[i].firstName是字符串,方括号访问字符串时只能用数字索引,你传入字符串name("Kristian")必然返回undefined,导致第一次循环匹配"Akira"时就触发return "No such contact",函数直接终止,根本没机会遍历到后面的"Kristian"对象。
  2. 提前终止循环:就算条件写对,也不能在循环内部的分支里直接返回"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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:25:01