插件窝 干货文章 Javascript怎样实现数组去重

Javascript怎样实现数组去重

uniqueArray array const 方法 214    来源:    2025-04-26

JavaScript 数组去重方法

在 JavaScript 中有多种方法可以实现数组去重,下面介绍几种常用的方法:

1. 使用 Set (ES6 最简单的方法)

const array = [1, 2, 3, 2, 4, 1, 5];
const uniqueArray = [...new Set(array)];
console.log(uniqueArray); // [1, 2, 3, 4, 5]

2. 使用 filter 方法

const array = [1, 2, 3, 2, 4, 1, 5];
const uniqueArray = array.filter((item, index) => array.indexOf(item) === index);
console.log(uniqueArray); // [1, 2, 3, 4, 5]

3. 使用 reduce 方法

const array = [1, 2, 3, 2, 4, 1, 5];
const uniqueArray = array.reduce((acc, current) => {
  if (!acc.includes(current)) {
    acc.push(current);
  }
  return acc;
}, []);
console.log(uniqueArray); // [1, 2, 3, 4, 5]

4. 使用 forEach 和 includes

const array = [1, 2, 3, 2, 4, 1, 5];
const uniqueArray = [];
array.forEach(item => {
  if (!uniqueArray.includes(item)) {
    uniqueArray.push(item);
  }
});
console.log(uniqueArray); // [1, 2, 3, 4, 5]

5. 对象键值法 (适用于原始值)

const array = [1, 2, 3, 2, 4, 1, 5];
const obj = {};
const uniqueArray = [];
for (let i = 0; i < array.length; i++) {
  if (!obj[array[i]]) {
    uniqueArray.push(array[i]);
    obj[array[i]] = true;
  }
}
console.log(uniqueArray); // [1, 2, 3, 4, 5]

性能比较

对于大型数组: - Set 方法通常性能最好 - 对象键值法也很快 - filter 和 reduce 方法在小数组上表现良好,但在大数组上可能较慢

注意事项

  1. 对于对象数组的去重,上述方法可能不适用,需要自定义比较函数
  2. Set 方法不适用于需要兼容旧浏览器的情况
  3. 对象键值法会将数字和字符串数字视为相同(如 1 和 "1")

对象数组去重示例

const array = [{id: 1}, {id: 2}, {id: 1}, {id: 3}];
const uniqueArray = array.reduce((acc, current) => {
  if (!acc.some(item => item.id === current.id)) {
    acc.push(current);
  }
  return acc;
}, []);
console.log(uniqueArray); // [{id: 1}, {id: 2}, {id: 3}]

根据你的具体需求和运行环境,选择最适合的去重方法。