如何对包含嵌套数组字段的JavaScript对象实现全字段搜索过滤
解决方案
你原来的代码没有处理数组类型的字段,writer数组的typeof返回值为object,会被原有逻辑直接跳过,修改后的过滤代码如下:
const filtered = search.filter((entry) => Object.values(entry).some((val) => { // 匹配字符串类型字段(title、reference) if (typeof val === 'string') { return val.includes(searchTerm.toLowerCase()); } // 匹配数组类型字段(writer) if (Array.isArray(val)) { return val.some(writerItem => typeof writerItem === 'string' && writerItem.toLowerCase().includes(searchTerm.toLowerCase()) ); } // 其他类型字段默认不匹配 return false; }) );
逻辑说明
- 新增数组类型判断分支,用
Array.isArray()识别writer这类数组字段 - 数组字段内部通过
some遍历元素,只要存在任意一个元素匹配搜索词就判定为符合条件 - 统一对搜索词和匹配内容做小写转换,避免大小写差异导致匹配失败,如果你已经提前把
searchTerm转成小写,可以去掉对应转换逻辑
内容的提问来源于stack exchange,提问作者Zack Amin
相关产品推荐
相关产品推荐

