如何用lodash或原生JS过滤对象数组,判断属性值是否存在于另一数组
过滤功能实现方案
Lodash 实现
你可以给_.filter传入自定义回调函数组合多过滤条件,示例代码如下:
// 提前定义要匹配的property2参考数组 const checkList = [val1, val2, val3]; let res = _.filter(array, item => { // 同时满足两个过滤条件 return item.property1 === "somevalue" && _.includes(checkList, item.property2); });
如果你偏好类匹配器的写法,也可以用_.overEvery组合内置匹配规则:
const checkList = [val1, val2, val3]; let res = _.filter(array, _.overEvery([ _.matches({property1: "somevalue"}), item => _.includes(checkList, item.property2) ]));
原生JavaScript实现
不需要引入第三方库,直接用原生Array.prototype.filter即可实现,数据量大时建议转Set优化查询性能:
const checkList = [val1, val2, val3]; // 转Set后存在性判断时间复杂度从O(n)降到O(1),性能更优 const checkSet = new Set(checkList); let res = array.filter(item => { return item.property1 === "somevalue" && checkSet.has(item.property2); });
内容的提问来源于stack exchange,提问作者user16780074
相关产品推荐
相关产品推荐

