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

如何对比整数数组与对象数组,返回匹配及不匹配的ID集合?

按typeID匹配拆分对象数组的ID集合

刚好碰到过类似的需求,我来给你捋捋怎么实现:

首先先明确我们的输入数据:

var arrayOfObjs = [
  { id: "d8eed6df-9f12-47d4-5b71-3352a92ebcf0", typeID: 2 },
  { id: "270d8355-d8b6-49c4-48ac-97a44422c705", typeID: 3 },
  { id: "sdks7878-d8b6-49c4-48ac-97a44422c705", typeID: 4 }
];
var arrayOfInts = [2, 4];

要得到匹配的matchingIDs和不匹配的missingIDs,最高效的方式是先把整数数组转成Set(因为Set的查找是O(1),比数组的includes快很多,数据量大的时候差别明显),然后遍历对象数组做判断:

// 把整数数组转成Set,优化查找性能
const typeIdSet = new Set(arrayOfInts);

// 初始化两个结果数组
const matchingIDs = [];
const missingIDs = [];

// 遍历对象数组
arrayOfObjs.forEach(obj => {
  if (typeIdSet.has(obj.typeID)) {
    matchingIDs.push(obj.id);
  } else {
    missingIDs.push(obj.id);
  }
});

// 输出结果
console.log(matchingIDs); 
// ["d8eed6df-9f12-47d4-5b71-3352a92ebcf0", "sdks7878-d8b6-49c4-48ac-97a44422c705"]
console.log(missingIDs);
// ["270d8355-d8b6-49c4-48ac-97a44422c705"]

补充说明

  • 为什么用Set?如果你的arrayOfInts很大,比如有上百个元素,用arrayOfInts.includes(obj.typeID)每次查找都要遍历整个数组,而Set.has()是直接哈希查找,速度快很多。
  • 如果只是小数据量,用includes也能实现,代码可以改成if (arrayOfInts.includes(obj.typeID)),但性能上还是Set更优。
  • 这个写法是原地遍历,不会生成额外的中间数组,内存占用也比较低。

内容的提问来源于stack exchange,提问作者webbydevy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:01:27