如何通过检查字符串存在性用JavaScript返回匹配的对象数组
筛选对象数组中
keys字段包含指定字符串的对象 需求:给定一个对象数组,筛选出其中keys字段包含指定字符串的对象,返回这些对象组成的新数组。
示例数组:
var arr = [ {id:1, keys: "zapp"}, {id:2, keys: "zapp, zoin"}, {id:3, keys: "dell"} ];
你尝试的代码问题分析
你写的代码存在几个问题:
- 变量名大小写不一致:定义的是
splitkeys,后续调用却用splitKeys,会直接报错 - 字符串分割方法调用错误:
elem.keys(',')应为elem.keys.split(','),需调用split方法才能分割字符串 - 逻辑冗余:无需单独判断是否包含逗号,所有情况可统一处理
优化后的解法
可以用数组的filter方法简化逻辑,同时处理keys字段中可能存在的空格,确保匹配准确:
function checkKeys(arr, keytocheck) { return arr.filter(elem => { // 按逗号分割字符串,去除每个元素前后空格后,检查是否包含目标字符串 return elem.keys.split(',').map(key => key.trim()).includes(keytocheck); }); } console.log(checkKeys(arr, "zapp"));
如果要避免部分匹配(比如目标是zapp,不想误匹配zappp),可以用正则表达式实现更严谨的匹配:
function checkKeys(arr, keytocheck) { // 构建正则规则,匹配独立的目标字符串,兼容逗号分隔和前后空格的情况 const regex = new RegExp(`(^|,\\s*)${keytocheck}(\\s*,|$)`); return arr.filter(elem => regex.test(elem.keys)); } console.log(checkKeys(arr, "zapp"));
期望输出
[ {id:1, keys: "zapp"}, {id:2, keys: "zapp, zoin"} ]
内容的提问来源于stack exchange,提问作者Sen
相关产品推荐
相关产品推荐

