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

JS使用for循环查找对象属性值总返回No such value如何修复

问题根因

你代码里的contacts是普通对象类型,不是数组,没有内置的length属性,所以循环条件i < contacts.length等价于i < undefined,结果永远为假,for循环从头到尾都不会执行,直接走到最后的return语句返回“No such value”。


修复方案1:调整contacts为数组结构(改动最小,适配原有循环逻辑)

把contacts从对象改成对象数组,原有循环逻辑不用改就能正常运行:

// contacts改为对象数组,获取到length属性
var contacts = [
  {
    "Name": "X",
    "Age": "48",
    "phoneNumber": "99373xxxxx",
    "Likes": ["Cricket", "spicyFood"]
  },
  {
    "Name": "Y",
    "Age": "39",
    "phoneNumber": "79788xxxxx",
    "Likes": ["comedyShows", "spicyFood"]
  },
  {
    "Name": "Z",
    "Age": "8",
    "phoneNumber": "Not Available",
    "Likes": ["funnyVideos", "Sweets"]
  }
];

function lookUp(name, prop) {
  for (var i = 0; i < contacts.length; i++) {
    if (contacts[i].Name === name) {
      return contacts[i][prop] || "No such property";
    };
  }
  return "No such value";
}
var data = lookUp("Z", "Likes");
console.log(data); // 输出 ["funnyVideos", "Sweets"]

修复方案2:保留contacts原有对象结构,修改遍历逻辑

如果需要保留contacts以亲属关系为key的结构,就把循环逻辑改成遍历对象的属性值即可:

var contacts = { // 原有对象结构完全不变
  "Father": {
    "Name": "X",
    "Age": "48",
    "phoneNumber": "99373xxxxx",
    "Likes": ["Cricket", "spicyFood"]
  },
  "Mother": {
    "Name": "Y",
    "Age": "39",
    "phoneNumber": "79788xxxxx",
    "Likes": ["comedyShows", "spicyFood"]
  },
  "Sister": {
    "Name": "Z",
    "Age": "8",
    "phoneNumber": "Not Available",
    "Likes": ["funnyVideos", "Sweets"]
  }
};

function lookUp(name, prop) {
  // 遍历contacts的所有属性值(也就是所有联系人对象)
  for (const contact of Object.values(contacts)) {
    if (contact.Name === name) {
      return contact[prop] || "No such property";
    }
  }
  return "No such value";
}
var data = lookUp("Z", "Likes");
console.log(data); // 输出 ["funnyVideos", "Sweets"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:21:03