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

