如何使用JavaScript的filter方法按指定字段筛选对象数组的匹配项
filter方法实现对象数组匹配过滤
实现逻辑
- 遍历第二个数组arr2的每一项,校验当前项的
id字段值是否在arr1的prid字段值集合中,匹配成功则保留 - 小数据量场景可直接用
filter+some组合实现 - 大数据量场景建议先提取prid为Set集合优化查找性能
基础实现(小数据量适用)
const filtered = arr2.filter(item2 => { // 检查arr1中是否存在prid和当前arr2项的id相等的元素 return arr1.some(item1 => item1.prid === item2.id) })
注:你给出的预期结果存在重复项错误,按提供的示例数组实际运行后得到的结果为:[{name:'kiwi', color:'red', id:12123}, {name:'kiwi3', color:'green',id:12124}]
优化实现(大数据量适用)
提前提取arr1的prid值为Set集合,将单次查找的时间复杂度从O(n)降低到O(1),避免多次遍历arr1:
// 提取所有prid到Set集合 const pridSet = new Set(arr1.map(item => item.prid)) const filtered = arr2.filter(item => pridSet.has(item.id))
内容的提问来源于stack exchange,提问作者Nightcrawler
相关产品推荐
相关产品推荐

