返回

花式去重,JavaScript数组去重方法总结

前端

JavaScript 数组去重的终极指南:手写代码与库函数

在 JavaScript 中,数组去重是一种常见的操作,它涉及从数组中移除重复元素。这在需要操作唯一值的场景中非常有用,例如收集表单数据或过滤结果。本文将深入探讨 JavaScript 中数组去重的各种方法,涵盖手写代码和库函数,帮助你掌握这门技术。

手写数组去重方法

1. 利用 Set 对象

Set 是一种内置的数据结构,它可以自动去重。我们可以利用 Set 将数组转换成一组唯一值,然后再将其转换回数组。

const uniqueSet = new Set(arr);
const uniqueArray = [...uniqueSet];

2. 借助 Map 对象

Map 也是一种数据结构,它可以根据键来存储值。我们可以使用 Map 将数组中的元素作为键,从而自动去重。

const uniqueMap = new Map();
arr.forEach((element) => uniqueMap.set(element, element));
const uniqueArray = [...uniqueMap.keys()];

3. 巧用 indexOf()

indexOf() 函数可返回元素在数组中的首次出现位置。我们可以利用它来遍历数组,仅保留首次出现的元素。

const uniqueArray = [];
for (const element of arr) {
  if (uniqueArray.indexOf(element) === -1) {
    uniqueArray.push(element);
  }
}

4. 使用 lastIndexOf()

lastIndexOf() 函数可返回元素在数组中的最后一次出现位置。我们可以利用它来遍历数组,仅保留最后一次出现的元素。

const uniqueArray = [];
for (const element of arr) {
  if (uniqueArray.lastIndexOf(element) === -1) {
    uniqueArray.push(element);
  }
}

5. 妙用 filter()

filter() 函数可根据提供的过滤条件创建新数组。我们可以利用它来过滤出数组中首次出现的元素。

const uniqueArray = arr.filter((element, index) => arr.indexOf(element) === index);

6. 应用 reduce()

reduce() 函数可将数组中的元素聚合为一个单一值。我们可以利用它来构建一个不包含重复元素的新数组。

const uniqueArray = arr.reduce((accumulator, element) => {
  if (!accumulator.includes(element)) {
    accumulator.push(element);
  }
  return accumulator;
}, []);

7. 利用 Array.from()

Array.from() 函数可将类似数组的对象转换为数组。我们可以利用它来将 Set 对象转换为数组。

const uniqueArray = Array.from(new Set(arr));

8. ES6 新特性

ES6 引入了新的数组方法,可轻松实现数组去重。

const uniqueArray = [...new Set(arr)];

库函数

1. Array.prototype.filter()

此方法提供了一种方便的方法来使用 filter() 函数进行数组去重。

const uniqueArray = arr.filter((element, index) => arr.indexOf(element) === index);

2. Array.prototype.reduce()

此方法提供了一种使用 reduce() 函数进行数组去重的替代方法。

const uniqueArray = arr.reduce((accumulator, element) => {
  if (!accumulator.includes(element)) {
    accumulator.push(element);
  }
  return accumulator;
}, []);

3. Array.from()

此方法提供了使用 Array.from() 函数进行数组去重的替代方法。

const uniqueArray = Array.from(new Set(arr));

结论

本文全面介绍了 JavaScript 中数组去重的各种方法,从手写代码到库函数。通过理解和应用这些技术,你可以有效地从数组中移除重复元素,从而操作更清晰、更有用的数据。

常见问题解答

  1. 哪种方法最有效率?

这取决于数组的大小和元素的分布。一般来说,Set 和 Map 方法效率较高,但对于非常大的数组,reduce() 方法可能更好。

  1. 如何处理非基本类型元素?

如果你正在处理非基本类型元素(如对象或数组),则需要使用深度比较函数。这可以确保比较元素的实际内容,而不是它们的引用。

  1. 能否在保持原始数组顺序的情况下进行去重?

可以使用一个对象来存储元素及其出现次数,然后创建一个新的数组,其中仅包含出现次数为 1 的元素。

  1. 如何使用 ES6 展开运算符?

ES6 展开运算符(...)可以将 Set 对象展开为一个数组。这是一种简洁的去重方式。

  1. 如何使用库函数?

库函数为数组去重提供了方便的 API。例如,Array.from() 函数可用于将 Set 对象转换为数组。