最简洁可靠的方式是用 set 配合扩展运算符:const mergedunique = [...new set([...arr1, ...arr2])];对象数组需按唯一字段(如 id)手动去重;兼容旧浏览器可用 concat + filter + indexof。

JavaScript 中合并两个数组并去重,最简洁可靠的方式是用 Set 配合扩展运算符(...),一行就能搞定。
用 Set + 扩展运算符(推荐)
这是现代 JavaScript 最常用、性能好且可读性强的方法:
const arr1 = [1, 2, 3]; const arr2 = [3, 4, 5]; const mergedUnique = [...new Set([...arr1, ...arr2])]; // 结果:[1, 2, 3, 4, 5]
-
原理:先用扩展运算符拼接两个数组,再用
Set自动剔除重复值,最后转回数组。 -
注意:Set 会保留首次出现的元素顺序,所以结果中重复项以
arr1中的为准。 - 支持数字、字符串等基本类型;对象需额外处理(见下文)。
处理对象数组的去重
如果数组里是对象,Set 无法按内容判重(因为对象引用不同),需手动指定唯一字段(如 id):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const arr1 = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
const arr2 = [{id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}];
const all = [...arr1, ...arr2];
const seen = new Set();
const mergedUnique = all.filter(item => {
if (seen.has(item.id)) return false;
seen.add(item.id);
return true;
});
// 结果:[{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 3, name: 'Charlie'}]
- 核心是用一个
Set记录已出现过的id,避免重复添加。 - 也可换成其他唯一标识字段,如
name或组合键(item.id + item.type)。
兼容旧浏览器的写法(如 IE)
若需支持不支持扩展运算符或 Set 的环境,可用 concat + filter + indexOf:
const arr1 = [1, 2, 3]; const arr2 = [3, 4, 5]; const merged = arr1.concat(arr2); const mergedUnique = merged.filter((item, index) => merged.indexOf(item) === index);
- 效率略低(
O(n²)),适合小数组。 -
indexOf对NaN不友好(始终返回 -1),如有 NaN 需单独处理。
一行函数封装(方便复用)
把逻辑封装成通用函数,支持任意多个数组:
const mergeUnique = (...arrays) => [...new Set(arrays.flat())]; // 使用: mergeUnique([1,2], [2,3], [3,4]); // [1, 2, 3, 4]
-
flat()合并多维数组(默认扁平一层),适合传入多个数组。 - 如需深度扁平,可传参
flat(Infinity)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










