如何改进数据过滤函数,使其仅保留满足所有条件的条目?
实现满足所有条件的数据过滤函数
需求说明
需要编写一个函数,接收data(待过滤的数据集)和include(条件数组)两个参数,仅保留同时满足所有include中条件的数据条目。
示例数据与预期结果
// 示例数据 const data = [ { user: "mike@mail.com", rating: 20, disabled: false }, { user: "greg@mail.com", rating: 14, disabled: false }, { user: "john@mail.com", rating: 25, disabled: true } ]; // 条件数组:需同时满足disabled为false、rating为20 const include = [{ disabled: false }, { rating: 20 }];
预期返回结果:
[{ user: "mike@mail.com", rating: 20, disabled: false }]
原代码问题分析
你当前的实现会把满足任意一个条件的条目加入结果,无法实现“所有条件同时满足”的需求。原因是只要条目匹配到任意一个条件键值对,就会被推入结果数组,没有做全条件校验。
改进后的实现
const filterInclude = (data, include) => { return data.filter(item => { // 检查当前条目是否满足所有条件对象 return include.every(cond => { // 检查当前条件对象的所有键值对是否都与条目匹配 return Object.entries(cond).every(([key, value]) => { return item[key] === value; }); }); }); };
逻辑解释
- 使用
Array.filter()遍历数据集,只保留符合条件的条目 - 用
Array.every()确保当前条目满足include数组中的每一个条件对象 - 对每个条件对象,通过
Object.entries()遍历其键值对,用every()确保所有键值对都与条目对应值完全匹配
测试验证
调用filterInclude(data, include)会返回预期的结果,仅保留同时满足两个条件的mike条目。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

