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
相关产品推荐
相关产品推荐

