返回

揭秘十余种JS数组去重方法,磨炼基础知识!

前端

前言

JavaScript数组去重,顾名思义,就是从一个数组中移除重复的元素,只保留唯一的元素。这在实际开发中非常常见,例如:从用户输入的数据中去除重复项、对数据进行分组、生成唯一的ID等等。在本文中,我们将逐一介绍十余种JS数组去重方法,从基础的数组方法到高级的库函数,循序渐进,深入浅出,让您全面掌握JS数组去重的奥秘。

基础数组方法

1. 使用Set对象

Set对象是ES6中新增的一种数据结构,它可以自动去除重复元素。我们可以将数组转换为Set对象,然后将其转换回数组,即可实现数组去重。

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

2. 使用filter方法

filter方法可以根据提供的过滤函数对数组中的元素进行筛选,只保留满足条件的元素。我们可以使用filter方法来去除数组中的重复元素。

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

3. 使用reduce方法

reduce方法可以将数组中的元素逐个累积起来,得到一个最终结果。我们可以使用reduce方法来去除数组中的重复元素。

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

循环方法

4. 使用for循环

for循环是一种最简单、最直观的循环方式。我们可以使用for循环来遍历数组,并使用indexOf方法或lastIndexOf方法来检查元素是否重复。

const arr = [1, 2, 3, 4, 5, 1, 2, 3];
const uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
  if (uniqueArr.indexOf(arr[i]) === -1) {
    uniqueArr.push(arr[i]);
  }
}
console.log(uniqueArr); // [1, 2, 3, 4, 5]

5. 使用while循环

while循环也是一种常用的循环方式。我们可以使用while循环来遍历数组,并使用includes方法或some方法来检查元素是否重复。

const arr = [1, 2, 3, 4, 5, 1, 2, 3];
const uniqueArr = [];
let i = 0;
while (i < arr.length) {
  if (!uniqueArr.includes(arr[i])) {
    uniqueArr.push(arr[i]);
  }
  i++;
}
console.log(uniqueArr); // [1, 2, 3, 4, 5]

6. 使用do-while循环

do-while循环是一种至少执行一次的循环方式。我们可以使用do-while循环来遍历数组,并使用every方法或findIndex方法来检查元素是否重复。

const arr = [1, 2, 3, 4, 5, 1, 2, 3];
const uniqueArr = [];
let i = 0;
do {
  if (uniqueArr.every((item) => item !== arr[i])) {
    uniqueArr.push(arr[i]);
  }
  i++;
} while (i < arr.length);
console.log(uniqueArr); // [1, 2, 3, 4, 5]

高级库函数

7. 使用lodash库

lodash是一个功能强大的JavaScript库,提供了许多有用的函数。其中,_.uniq()函数可以轻松实现数组去重。

const arr = [1, 2, 3, 4, 5, 1, 2, 3];
const uniqueArr = _.uniq(arr);
console.log(uniqueArr); // [1, 2, 3, 4, 5]

8. 使用underscore库

underscore是一个与lodash类似的JavaScript库,也提供了许多有用的函数。其中,_.uniq()函数可以轻松实现数组去重。

const arr = [1, 2, 3, 4, 5, 1, 2, 3];
const uniqueArr = _.uniq(arr);
console.log(uniqueArr); // [1, 2, 3, 4, 5]

9. 使用immutable.js库

immutable.js是一个专注于不可变数据的JavaScript库。其中,Immutable.Set()函数可以轻松实现数组去重。

const arr = [1, 2, 3, 4, 5, 1, 2, 3];
const uniqueArr = Immutable.Set(arr).