You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

高效匹配arrA与arrB:筛选arrB中双属性均属arrA的对象

高效筛选符合属性键要求的对象数组元素

要高效实现需求,核心是优化属性键的查找效率,具体步骤如下:

  1. 将arrA转为Set集合:利用Set的has()方法O(1)的时间复杂度,替代数组includes()的O(n)查找,大幅提升判断速度。
  2. 遍历筛选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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:25:20