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

如何在JavaScript中从两个数组生成仅含唯一单词的新数组?

获取两个数组的唯一值(对称差集)

你需要的是仅在其中一个数组中出现的元素(即两个数组的对称差集),而不是合并去重后的并集。之前用concat加Set得到的是所有出现过的元素去重,不符合你的需求;另外对于字符串这类原始值,Set是可以正确识别重复值的,不存在“将数组视为不同对象”的问题——你的示例数组都是字符串,所以这个问题并不存在。

下面是高效的实现方案,时间复杂度为O(n+m),适合处理大数据量:

const arr1 = ['apple', 'banana', 'cherry', 'date', 'elderberry'];
const arr2 = ['cherry', 'date', 'elderberry', 'fig', 'grape'];

// 转换为Set,利用其O(1)的查找效率
const set1 = new Set(arr1);
const set2 = new Set(arr2);

// 筛选出仅在arr1中存在的元素
const onlyInArr1 = [...set1].filter(item => !set2.has(item));
// 筛选出仅在arr2中存在的元素
const onlyInArr2 = [...set2].filter(item => !set1.has(item));

// 合并结果
const uniqueValues = onlyInArr1.concat(onlyInArr2);

console.log(uniqueValues); // 输出: ['apple', 'banana', 'fig', 'grape']

更简洁的写法

如果追求代码简洁,可以合并筛选逻辑:

const set1 = new Set(arr1);
const set2 = new Set(arr2);

const uniqueValues = [...new Set([...arr1, ...arr2])].filter(
  item => set1.has(item) !== set2.has(item)
);

为什么这个方法高效

Set的has()方法是O(1)时间复杂度,遍历两个数组和筛选的操作都是线性时间,整体比嵌套循环(O(n*m))或者用数组includes()(每次查找O(n))的方法高效得多,在数组元素数量较多时优势明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:02:13