菜鸟-创作你的创作

JavaScript数组去重常见四种方法(最新整理)

下面给你一份 最新整理的 JavaScript 数组去重四大常见方法,包含写法、原理、优缺点与最佳实践,一看就明白、可直接用于面试笔记。


✅ 1. 使用 ES6 Set 去重(最推荐)

✔ 写法最短

✔ 性能最好

✔ 可去除所有重复,包括对象引用一致的情况

const arr = [1, 2, 2, 3, 4, 4];

const result = [...new Set(arr)];
console.log(result); // [1, 2, 3, 4]

适用场景

不适用

const arr = [{a:1}, {a:1}];
new Set(arr); // 不去重


✅ 2. 使用 filter + indexOf 去重(传统方法)

原理:

indexOf 总是返回元素第一次出现的位置。

const arr = [1, 2, 2, 3];

const result = arr.filter((item, index) => {
  return arr.indexOf(item) === index;
});

console.log(result);  // [1, 2, 3]

优点

缺点


✅ 3. 使用 reduce + Map(可处理对象内容相同)

这是项目中高级写法,可按对象字段去重。

const arr = [
  { id: 1, name: "A" },
  { id: 1, name: "A" },
  { id: 2, name: "B" }
];

const result = arr.reduce((map, item) => {
  if (!map.temp.has(item.id)) {
    map.temp.add(item.id);
    map.result.push(item);
  }
  return map;
}, { temp: new Set(), result: [] }).result;

console.log(result);
// [ { id: 1, name: "A" }, { id: 2, name: "B" } ]

优点

缺点


✅ 4. 使用 sort + 遍历相邻元素(适合超大数组)

原理:

先排序 → 相同的值就在一起 → 逐个比较

const arr = [3, 1, 2, 2, 3];

const result = arr
  .sort((a, b) => a - b)
  .filter((item, index, array) => {
    return index === 0 || item !== array[index - 1];
  });

console.log(result);  // [1, 2, 3]

优点

缺点


🎯 四种方法对比总结

方法代码量性能是否保留原顺序对象内容去重
Set最少✔✔✔(最快)
filter + indexOf中等✘(慢)
reduce + Map/Set较多✔✔✔(最佳)
sort + 遍历一般✔✔✘(会排序)

📌 实际项目中的最佳实践推荐

✔ 基础类型数组(数字/字符串)

[...new Set(arr)]

✔ 多字段对象数组去重

reduce + Map/Set

✔ 大数据量数组,需要性能

sort + 遍历

退出移动版