如何过滤对象数组,仅返回指定属性包含目标字符串的对应条目
针对指定属性的对象数组过滤实现
你只需要将原有实现中遍历所有属性的逻辑替换为遍历指定属性列表即可,调整后的代码如下:
function filterByValue(array, keyword) { // 定义需要匹配的属性白名单 const allowedFields = ['name', 'price', 'email']; const lowerCaseKeyword = keyword.toLowerCase(); return array.filter(item => allowedFields.some(field => String(item[field]).toLowerCase().includes(lowerCaseKeyword) ) ); }
优化说明
- 提前将搜索关键词转为小写,避免循环中重复执行转换操作,提升执行效率
- 如果需要适配更多不同的匹配场景,可以将属性白名单作为入参开放,实现更灵活的调用:
function filterByValue(array, keyword, allowedFields = ['name', 'price', 'email']) { const lowerCaseKeyword = keyword.toLowerCase(); return array.filter(item => allowedFields.some(field => String(item[field]).toLowerCase().includes(lowerCaseKeyword) ) ); }
使用示例
// 搜索所有匹配关键词'100'的商品 const result = filterByValue(products, '100'); // 返回结果为[{name: 'car', price: 100, ...}]
内容的提问来源于stack exchange,提问作者grmnth
相关产品推荐
相关产品推荐

