如何高效获取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
相关产品推荐
相关产品推荐

