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

如何高效获取JavaScript对象中subjects属性的所有可能值?

获取对象数组中subjects所有唯一值的高效方法

要快速提取数组里所有subjects的唯一值,不用局限于“遍历+手动推入计数数组”的方式,利用JS的Set或Map能实现更高效的去重——它们的查找操作是O(1)复杂度,比每次遍历数组检查存在性要快得多。

方法1:用Set结合flatMap(简洁写法)

先通过flatMap把所有嵌套的subjects数组展开成一维数组,再用Set根据subject的id去重(id作为唯一标识,比直接存对象更可靠),最后转回数组并匹配对应的subject对象:

const events = [
  // 你的对象数组
];

// 获取所有唯一的subject对象
const uniqueSubjects = Array.from(
  new Set(events.flatMap(event => event.subjects.map(subj => subj.id)))
).map(id => events.flatMap(e => e.subjects).find(subj => subj.id === id));

方法2:用Map做遍历记录(性能最优)

如果追求极致性能,直接遍历嵌套数组,用Map记录已经出现过的id,只保留首次出现的subject对象,避免额外的数组展开操作:

const events = [
  // 你的对象数组
];

const seenIds = new Map();
const uniqueSubjects = [];

for (const event of events) {
  for (const subj of event.subjects) {
    if (!seenIds.has(subj.id)) {
      seenIds.set(subj.id, true);
      uniqueSubjects.push(subj);
    }
  }
}

对比传统方法

传统的“遍历+检查计数数组”(比如用indexOf或includes判断是否存在),每次检查都要遍历计数数组,时间复杂度是O(n²),数据量大的时候性能会明显下降。而用Set/Map的方法时间复杂度是O(n),效率提升显著。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:42:27