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

使用JavaScript或jQuery在数组中查找指定值的问题排查

问题分析与解决方案

你的代码里有几个关键错误导致每次都提示编号不存在,我帮你逐一梳理并修正:

错误点拆解

  • 遍历对象而非目标数组:你的rooms是一个包含datas数组的对象,但你直接遍历了rooms本身,而不是真正存数据的rooms.datas数组,这会让循环逻辑完全偏离目标。
  • 属性名大小写不匹配:数组元素里的编号属性是大写的ID,但你判断时用了小写的id——JavaScript是大小写敏感的,这就导致永远匹配不上。
  • 无效的字符串属性访问:"001".id是错误写法,字符串根本没有id属性,直接用"001"做对比即可。
  • 错误的数组操作:rooms是对象,不能调用push方法,要添加新元素得往rooms.datas这个数组里操作。

修正后的代码

var rooms = { "datas": [{"ID": "001"}, {"ID": "002"}, {"ID": "003"}, {"ID": "004"}] }; 
var isPresent = false; 
// 遍历datas数组,而非外层的rooms对象
$.each(rooms.datas, function(i, v){ 
  // 用大写ID匹配,直接对比目标字符串"001"
  if(v.ID === "001"){ 
    isPresent = true; 
    alert("Yes! Available :-)"); 
    // 找到匹配项后提前终止循环,提升性能
    return false;
  } 
}); 
if(!isPresent){ 
  // 往datas数组中添加新对象(替换成你的newObject即可)
  rooms.datas.push({"ID": "005"});
  alert("Doo! Not available"); 
} 

额外优化建议

  • 用===严格相等判断代替==,避免类型转换带来的意外问题。
  • 找到匹配项后通过return false终止$.each循环,不用继续遍历剩余元素,提升效率。
  • 如果你的项目允许使用ES6语法,也可以用更简洁的some方法替代jQuery的each:
var isPresent = rooms.datas.some(item => item.ID === "001");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:12:27