如何判断对象数组中是否存在指定键?代码问题排查与修复
解决对象数组中键的存在性检测问题
嘿,我来帮你搞定这个问题!你的代码里有几个关键问题导致检测失败,咱们一步步理清楚:
问题分析
- 对象数组的访问错误:你定义的
obj是一个包含单个对象的数组,直接用obj[val]是在尝试访问数组的索引(比如输入"the carribean"会被当成数组下标,显然不存在),而不是数组内部对象的键。 - 输入值的空格干扰:你输入的
' the carribean '带有首尾空格,但对象里的键是'the carribean',两者完全不匹配,自然检测不到。 - 存在性判断的潜在隐患:用
obj[0][val]判断的话,如果键对应的是undefined这类假值,会误判为“不存在”,用更可靠的方法会更稳妥。
修正后的代码
先看针对当前场景(数组只有一个对象)的解决方案:
var obj = [{ "7364234":"hsjd", "tom and jerry":"dsjdas", "mickey mouse":"kfjskdsad", "popeye the sailor man":"alkdsajd", "the carribean":"kasjdsjad" }]; // 1. 获取输入值并去除首尾空格 var val = $("input[name='type_ahead_input']").val().trim(); // 2. 取出数组中的目标对象 var targetObj = obj[0]; // 3. 用hasOwnProperty可靠检测键是否存在 if (targetObj.hasOwnProperty(val)) { console.log('exists'); } else { console.log('does not exist'); }
如果你的数组里有多个对象,需要遍历检查每个对象是否包含该键,可以用Array.some()方法:
var obj = [ { "7364234":"hsjd", "tom and jerry":"dsjdas" }, { "mickey mouse":"kfjskdsad", "the carribean":"kasjdsjad" } ]; var val = $("input[name='type_ahead_input']").val().trim(); // 遍历数组,只要有一个对象包含该键就返回true const keyExists = obj.some(item => item.hasOwnProperty(val)); console.log(keyExists ? 'exists' : 'does not exist');
额外说明
trim()方法会去除字符串首尾的空格、换行符、制表符等空白字符,完美解决输入带空格的问题。hasOwnProperty()是判断对象自身是否包含指定键的标准方法,不会受原型链上的属性干扰。- 你也可以用
Object.keys(targetObj).includes(val)来替代hasOwnProperty,效果是一样的,看个人习惯。
内容的提问来源于stack exchange,提问作者Ceejay
相关产品推荐
相关产品推荐

