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

如何合并多个数组并查找重复项?能否使用filter方法实现?

多数组查找重复项:使用filter及其他可行方案

你的代码问题分析

你代码里的concat操作是正常的,但后续调用join(" ")会把合并后的数组转换为字符串,而字符串并没有filter方法,这就是filter无法生效的核心原因。


修复方案:用filter实现多数组重复项查找

方法1:合并数组后筛选重复项(含去重结果)

先把所有数组合并,然后利用filter结合indexOf找出重复出现的元素,最后用Set去重得到唯一的重复任务列表:

let monday = ["task1", "task2", "task3", "task4", "taks5", "task6", "taks7"];
let tuesday = ["task2", "task3", "task4", "task5", "taks6"];
let wednesday = ["task7", "task8", "task9", "task10", "taks11", "task12"];

// 合并所有任务数组
const allTasks = monday.concat(tuesday, wednesday);

// 筛选出所有重复出现的元素(会包含重复实例)
const repeatedItems = allTasks.filter((task, index) => {
  // indexOf返回元素第一次出现的索引,不等则说明当前元素是重复项
  return allTasks.indexOf(task) !== index;
});

// 去重,得到唯一的重复任务列表
const uniqueDuplicates = [...new Set(repeatedItems)];

console.log(uniqueDuplicates); // 输出: ["task2", "task3", "task4"]

方法2:直接比对其他数组(适合少量数组)

如果数组数量不多,可以直接遍历其中一个数组,用filter结合includes检查元素是否存在于其他数组中:

const duplicates = monday.filter(task => {
  return tuesday.includes(task) || wednesday.includes(task);
});

console.log(duplicates); // 输出: ["task2", "task3", "task4"]

其他高效方案(非filter)

如果处理大数据量数组,用Map统计出现次数的性能更优:

const taskCount = new Map();
allTasks.forEach(task => {
  taskCount.set(task, (taskCount.get(task) || 0) + 1);
});

// 筛选出现次数大于1的任务
const duplicates = [...taskCount.entries()]
  .filter(([_, count]) => count > 1)
  .map(([task]) => task);

console.log(duplicates); // 输出: ["task2", "task3", "task4"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:30:54