如何用Lodash实现多属性匹配不同数组的元素筛选?
用Lodash筛选匹配多属性的元素
嘿,我来帮你把那段forEach+标记的代码转成更简洁优雅的Lodash实现!首先得明确你的需求:从主数组里筛选出**多个内部属性分别匹配不同数组(或同一条件数组的多属性条目)**的元素,对吧?下面分两种常见场景给你示例:
场景1:元素的多属性需匹配条件数组中的某一条目
比如你有一个主数据数组,还有一个包含多属性匹配规则的数组,要选出主数组中完全符合某条规则的元素:
示例代码
// 主数据数组 const mainItems = [ { id: 1, category: 'book', price: 20 }, { id: 2, category: 'pen', price: 5 }, { id: 3, category: 'book', price: 30 }, { id: 4, category: 'notebook', price: 10 } ]; // 匹配条件数组(每条是一组多属性规则) const matchRules = [ { category: 'book', price: 20 }, { category: 'notebook', price: 10 } ]; // Lodash筛选逻辑 const filteredItems = _.filter(mainItems, item => // 检查当前元素是否匹配任意一条规则 _.some(matchRules, rule => _.isMatch(item, rule)) ); console.log(filteredItems); // 输出:[{ id: 1, category: 'book', price: 20 }, { id: 4, category: 'notebook', price: 10 }]
方法说明
_.filter:遍历主数组,返回所有符合条件的元素_.some:判断当前元素是否满足条件数组中的至少一条规则_.isMatch:浅比较对象,检查元素是否包含规则中的所有属性(完美匹配多属性)
场景2:元素的不同属性需分别匹配不同的数组
如果是元素的属性A要在数组A里,属性B要在数组B里,这种多属性分别校验的场景:
示例代码
// 主数据数组 const mainItems = [ { name: 'Alice', role: 'admin' }, { name: 'Bob', role: 'editor' }, { name: 'Charlie', role: 'admin' }, { name: 'Diana', role: 'viewer' } ]; // 分别存储合法值的数组 const validNames = ['Alice', 'Diana']; const validRoles = ['admin', 'viewer']; // Lodash筛选逻辑 const filteredItems = _.filter(mainItems, item => _.includes(validNames, item.name) && _.includes(validRoles, item.role) ); console.log(filteredItems); // 输出:[{ name: 'Alice', role: 'admin' }, { name: 'Diana', role: 'viewer' }]
方法说明
_.includes:快速检查某个值是否存在于目标数组中- 用逻辑与
&&连接多个属性的校验条件,确保所有属性都符合要求
这种写法完全替代了手动forEach+标记的逻辑,代码更简洁、可读性更强,而且是Lodash推荐的声明式写法,不用再手动管理循环和状态变量啦!
内容的提问来源于stack exchange,提问作者Questioning
相关产品推荐
相关产品推荐

