高效匹配arrA与arrB:筛选arrB中双属性均属arrA的对象
高效筛选符合属性键要求的对象数组元素
要高效实现需求,核心是优化属性键的查找效率,具体步骤如下:
- 将arrA转为Set集合:利用Set的
has()方法O(1)的时间复杂度,替代数组includes()的O(n)查找,大幅提升判断速度。 - 遍历筛选arrB:对每个对象,获取其所有属性键(已知固定2个),检查两个键是否都存在于Set中,符合条件的保留。
完整实现代码
const arrA = ["green", "blue", "orange"]; const arrB = [ { orange: 4, green: 4}, { green: 0, yellow: 0}, { yellow: 1, orange: 4 }, { blue: 2, green: 1 }, { blue: 2, yellow: 1 }, { green: 3, yellow: 2 }, { green: 1, blue: 3}, { green: 5, yellow: 2 }, { green: 5, blue: 2} ]; // 转换为Set优化查找 const validKeys = new Set(arrA); // 筛选符合条件的对象 const arrC = arrB.filter(obj => { const [key1, key2] = Object.keys(obj); return validKeys.has(key1) && validKeys.has(key2); }); console.log(arrC);
输出结果
运行后得到的arrC与预期完全一致:
[ {orange: 4, green: 4 }, {blue: 2, green: 1 }, {green: 1, blue: 3 }, {green: 5, blue: 2 } ]
效率说明
- 时间复杂度:O(n + m),其中n是arrA的长度,m是arrB的长度。转换Set的时间是O(n),遍历筛选是O(m),每个对象的键判断是O(1)。
- 对比直接用数组
includes()的方案(时间复杂度O(m*n)),当arrA或arrB元素数量较大时,性能提升非常明显。
内容的提问来源于stack exchange,提问作者barleyhorse
相关产品推荐
相关产品推荐

