JavaScript 数组怎么去重

在日常写代码的过程中,我们常常会遇到一个小麻烦:比如从用户输入的表单里拿到一串重复的爱好标签,或者从接口返回的商品列表里发现重复的ID,这时候就需要把重复的内容去掉,只留唯一的。如果你用JavaScript处理数据,最常用的工具就是数组,那怎么给数组去重呢?别着急,咱们用生活化的例子一步步讲清楚。

最基础的方法:用新数组“装”不重复的元素

假设你现在有一堆水果标签,用数组存起来是这样的:['苹果', '香蕉', '苹果', '橙子', '香蕉'],要去掉重复的,最直白的思路就是“挨个检查,没见过就放进新篮子”。

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快速处理普通场景,遇到特殊情况再针对性调整就好。

上一篇 Java 如何遍历 Map