JavaScript 数组怎么去重
在日常写代码的过程中,我们常常会遇到一个小麻烦:比如从用户输入的表单里拿到一串重复的爱好标签,或者从接口返回的商品列表里发现重复的ID,这时候就需要把重复的内容去掉,只留唯一的。如果你用JavaScript处理数据,最常用的工具就是数组,那怎么给数组去重呢?别着急,咱们用生活化的例子一步步讲清楚。
最基础的方法:用新数组“装”不重复的元素
假设你现在有一堆水果标签,用数组存起来是这样的:['苹果', '香蕉', '苹果', '橙子', '香蕉'],要去掉重复的,最直白的思路就是“挨个检查,没见过就放进新篮子”。

具体写代码的话,就是先创建一个空数组,然后循环遍历原来的数组,每拿出一个水果,就看看新数组里有没有这个水果,没有就加进去。比如:
`javascript
// 原来的重复水果数组
const fruits = ['苹果', '香蕉', '苹果', '橙子', '香蕉'];
// 装不重复水果的新数组
const uniqueFruits = [];
// 循环检查每个水果
for (let i = 0; i < fruits.length; i++) {
const current = fruits[i];
// 如果新数组里没有当前水果,就加进去
if (!uniqueFruits.includes(current)) {
uniqueFruits.push(current);
}
}
console.log(uniqueFruits); // 输出:['苹果', '香蕉', '橙子']
`
这个方法就像你整理购物袋,每拿一样东西就确认一下桌面有没有,没有就摆上去,简单好懂,适合新手。
更高效的方法:利用Set的“唯一性”特性
如果你的数组很长,比如有上万个元素,用上面的循环方法可能会有点慢,这时候可以用JavaScript里的Set。Set就像一个“只放独一份东西”的收纳盒,不管你放多少次一样的东西,它只会存一次。
用Set去重的步骤也很简单:先把数组转成Set,把重复的自动去掉,再把Set转回数组就行。比如处理刚才的水果数组:
`javascript
const fruits = ['苹果', '香蕉', '苹果', '橙子', '香蕉'];
// 把数组转成Set,自动去重
const fruitSet = new Set(fruits);
// 把Set转回数组
const uniqueFruits = Array.from(fruitSet);
// 或者更短的写法:[...new Set(fruits)]
console.log(uniqueFruits); // 输出:['苹果', '香蕉', '橙子']
`
这个方法就像你把一堆水果倒进一个只收独一份的盒子,晃一晃,多余的自动弹出去,再倒回新篮子,速度快了不少,也更简洁。
注意:特殊情况要留心
这两种方法虽然好用,但遇到一些特殊情况会“翻车”。比如如果数组里有NaN或者引用类型的数据(比如对象、数组),Set就会失效。举个例子:
`javascript
const testArr = [NaN, NaN, {name: '小明'}, {name: '小明'}];
console.log([...new Set(testArr)]);
// 输出:[NaN, {name: '小明'}, {name: '小明'}]
`
这里的两个NaN本来应该是重复的,结果Set没去掉;两个长得一样的对象,也因为是不同的“口袋”,被当成不一样的东西。如果你的数组里经常有这类内容,就得用之前的循环检查方法,或者给对象加个唯一标识(比如ID)再去重。
总的来说,给JavaScript数组去重没有绝对最好的方法,新手先从基础循环学起,熟练之后用Set快速处理普通场景,遇到特殊情况再针对性调整就好。