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

JavaScript中如何合并同一变量遍历生成的多个筛选数组

你现有代码的核心问题是在forEach循环内部反复声明filtered变量,没有对每次筛选出的单语言结果做聚合,循环执行完只能拿到最后一次匹配的单个数组,要得到合并后的统一数组,可参考以下几种实现方案:

实现方案
  • 基础循环追加写法
    提前初始化空的结果数组,每次筛选完单语言匹配结果后,将元素追加到总结果中,逻辑直白易读:

    // 初始化存储最终结果的空数组
    const filtered = []
    selected.forEach(langsel => {
      const currentLangPersons = person.filter(pers => pers.language == langsel)
      // 用展开运算符把当前语言匹配到的人员逐个追加到结果数组,避免产生嵌套
      filtered.push(...currentLangPersons)
    })
    
  • 精简写法(flatMap)
    直接用数组原生flatMap方法,一步完成「按选中项筛选+自动合并所有筛选结果」的逻辑,代码更简洁:

    const filtered = selected.flatMap(langsel => 
      person.filter(pers => pers.language == langsel)
    )
    
  • 高性能写法(单次遍历)
    如果人员列表数据量较大,前两种写法会对每个选中语言都遍历一次全量人员列表,性能损耗较高。可以先把选中语言转为Set集合,只遍历一次人员列表即可完成筛选,结果天然是合并后的一维数组:

    // 转Set后判断语言是否选中的时间复杂度为O(1),比数组includes效率高很多
    const selectedLangs = new Set(selected)
    const filtered = person.filter(pers => selectedLangs.has(pers.language))
    
最终效果

以上任意一种写法,在同时选中英语、西班牙语时,都会返回符合预期的统一数组合并结果:

[
{id: "2", name: "Tomas Addreh", language: "English"},
{id: "6", name: "Mark Addreh", language: "English"},
{id: "15", name: "Alex Atres", language: "Spanish"},
{id: "1", name: "Mark Sertoj", language: "Spanish"},
{id: "12", name: "Martha Forrest", language: "Spanish"}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:48:17