admin 管理员组

文章数量: 887044


2023年12月20日发(作者:stl转stp)

超全的12种数组去重的方法

一、概述

数组去重是前端开发中经常遇到的问题,因为在实际开发中我们经常需要从后台获取到数据并展示在页面上,而这些数据往往存在重复的情况。本文将介绍12种数组去重的方法,包括传统的for循环去重、ES6 Set去重、ES6 Map去重等。

二、传统的for循环去重

1. 方法描述:

使用for循环遍历数组,判断当前元素是否已存在于新数组中。若不存在则将其添加到新数组中。

2. 代码示例:

```

function unique(arr) {

var newArr = [];

for (var i = 0; i < ; i++) {

if (f(arr[i]) === -1) {

(arr[i]);

}

}

return newArr;

}

```

三、ES6 Set去重

1. 方法描述:

使用ES6新增的Set数据结构,将数组转化为Set集合,再将Set集合转化为数组即可实现去重。

2. 代码示例:

```

function unique(arr) {

return (new Set(arr));

}

```

四、ES6 Map去重

1. 方法描述:

使用ES6新增的Map数据结构,遍历原始数组并将其作为Map的key值存储。如果当前元素已存在于Map中,则不做处理;否则将其添加到Map中,并将其值设为1。最后通过()方法将Map转化为数组即可。

2. 代码示例:

```

function unique(arr) {

const map = new Map();

const newArr = [];

for (let i = 0; i < ; i++) {

if (!(arr[i])) {

(arr[i], 1);

(arr[i]);

}

}

return newArr;

}

```

五、利用indexOf和lastIndexOf去重

1. 方法描述:

使用indexOf和lastIndexOf方法判断当前元素在数组中出现的位置,若两个方法返回的位置相同,则说明当前元素只出现一次,否则说明当前元素出现了多次,应该被去重。

2. 代码示例:

```

function unique(arr) {

var newArr = [];

for (var i = 0; i < ; i++) {

if (f(arr[i]) === dexOf(arr[i])) {

(arr[i]);

}

}

return newArr;

}

```

六、利用filter方法去重

1. 方法描述:

使用filter方法遍历原始数组,并将符合条件的元素添加到新数组中。具体来说,在filter回调函数中判断当前元素在原始数组中第一次出现的位置是否等于当前索引。如果是,则说明当前元素未被重复添加;否则说明当前元素已经被添加过了,应该被过滤掉。

2. 代码示例:

```

function unique(arr) {

return (function(item, index, array){

return f(item) === index;

});

}

```

七、利用reduce方法去重

1. 方法描述:

使用reduce方法遍历原始数组,并将符合条件的元素添加到新数组中。具体来说,在reduce回调函数中判断当前元素是否已存在于新数组中。如果不存在,则将其添加到新数组中。

2. 代码示例:

```

function unique(arr) {

return (function(prev, cur) {

if (f(cur) === -1) {

(cur);

}

return prev;

}, []);

}

```

八、利用递归去重

1. 方法描述:

使用递归实现去重,每次取出原始数组的第一个元素,然后递归调用去重函数,判断剩余部分是否包含该元素,如果包含则跳过;否则将该元素添加到新数组中。

2. 代码示例:

```

function unique(arr) {

var newArr = [];

function recursion(array) {

if ( === 0) return;

var firstItem = array[0];

if (f(firstItem) === -1) {

(firstItem);

}

recursion((1));

}

recursion(arr);

return newArr;

}

```

九、利用Object键值对去重

1. 方法描述:

使用Object对象存储原始数组的每个元素,并将其值设为true。遍历原始数组并判断当前元素在Object对象中是否存在,如果不存在则将其添加到新数组中,并在Object对象中添加该元素。

2. 代码示例:

```

function unique(arr){

var obj = {};

var newArr = [];

for(var i=0;i<;i++){

if(!obj[arr[i]]){

obj[arr[i]] = true;

(arr[i]);

}

}

return newArr;

}

```

十、利用includes方法去重

1. 方法描述:

使用includes方法判断当前元素是否已存在于新数组中,如果不存在

则将其添加到新数组中。

2. 代码示例:

```

function unique(arr) {

var newArr = [];

h(function(item) {

if (!es(item)) {

(item);

}

});

return newArr;

}

```

十一、利用ES6 Map和Set去重

1. 方法描述:

使用ES6的Map和Set数据结构实现去重。具体来说,将原始数组转化为Set集合,然后遍历Set集合并将其添加到Map中。最后通过()方法将Map转化为数组即可。

2. 代码示例:

```

function unique(arr) {

const set = new Set(arr);

const map = new Map();

h(function(value, key) {

(key, value);

});

return (());

}

```

十二、利用双重循环去重

1. 方法描述:

使用双重循环遍历原始数组,并判断当前元素是否已存在于新数组中。如果不存在,则将其添加到新数组中。

2. 代码示例:

```

function unique(arr) {

var newArr = [];

for(var i=0;i<;i++){

for(var j=i+1;j<;j++){

if(arr[i] === arr[j]){

j = ++i;

}

}

(arr[i]);

}

return newArr;

}

```

结语:

本文介绍了12种数组去重的方法,包括传统的for循环去重、ES6

Set去重、ES6 Map去重等。不同的方法各有优缺点,在实际开发中需要根据具体情况选择合适的方法。


本文标签: 数组 元素 方法