超全的12种数组去重方法,我亲测有效!

作为一名前端开发者,我在日常工作中经常遇到需要对数组进行去重的操作。最近在简书上看到一篇关于数组去重的热搜文章,让我深受启发。今天就和大家分享一下我总结的超全12种数组去重方法。


首先,我们来了解一下最基础的几种方法:


1. 使用Set

Set 是 ES6 中引入的一种数据结构,其特点就是集合中的元素不会重复。通过将数组转化为 Set,然后再转回数组,就可以轻松实现去重。


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

2. 使用indexOf

我们可以利用 indexOf 方法来判断某个元素是否已经存在于结果数组中。如果不存在,则将其加入结果数组。


function removeDuplicates(arr) {
const result = [];
for (let i = 0; i < arr.length; i++) {
if (result.indexOf(arr[i]) === -1) {
result.push(arr[i]);
}
}
return result;
}
const arr = [1, 2, 2, 3, 4, 4];
console.log(removeDuplicates(arr)); // 输出 [1, 2, 3, 4]

3. 使用includes

includes 方法可以用来判断一个元素是否已经存在于数组中,与 indexOf 类似,但语法更简洁。


function removeDuplicates(arr) {
const result = [];
for (let item of arr) {
if (!result.includes(item)) {
result.push(item);
}
}
return result;
}
const arr = [1, 2, 2, 3, 4, 4];
console.log(removeDuplicates(arr)); // 输出 [1, 2, 3, 4]

4. 使用filter

filter 方法可以结合 indexOf 来实现去重,逻辑简单明了。


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

5. 使用reduce

reduce 方法也可以用来实现数组去重,代码稍显复杂,但功能强大。


const arr = [1, 2, 2, 3, 4, 4];
const uniqueArr = arr.reduce((acc, cur) => acc.includes(cur) ? acc : [...acc, cur], []);
console.log(uniqueArr); // 输出 [1, 2, 3, 4]

除了以上这些常见方法,还有其他一些高级技巧:


6. 使用Map

Map 可以用来记录已经出现过的元素,从而实现去重。


function removeDuplicates(arr) {
const map = new Map();
const result = [];
for (let item of arr) {
if (!map.has(item)) {
map.set(item, true);
result.push(item);
}
}
return result;
}
const arr = [1, 2, 2, 3, 4, 4];
console.log(removeDuplicates(arr)); // 输出 [1, 2, 3, 4]

7. 使用for循环嵌套

这种方法虽然效率较低,但在某些场景下仍然适用。


function removeDuplicates(arr) {
const result = [];
for (let i = 0; i < arr.length; i++) {
let isUnique = true;
for (let j = 0; j < result.length; j++) {
if (arr[i] === result[j]) {
isUnique = false;
break;
}
}
if (isUnique) {
result.push(arr[i]);
}
}
return result;
}
const arr = [1, 2, 2, 3, 4, 4];
console.log(removeDuplicates(arr)); // 输出 [1, 2, 3, 4]

8. 使用some

some 方法可以用来检查数组中是否有重复元素。


function removeDuplicates(arr) {
const result = [];
for (let item of arr) {
if (!result.some(el => el === item)) {
result.push(item);
}
}
return result;
}
const arr = [1, 2, 2, 3, 4, 4];
console.log(removeDuplicates(arr)); // 输出 [1, 2, 3, 4]

9. 使用find

find 方法可以用来查找数组中是否存在重复元素。


function removeDuplicates(arr) {
const result = [];
for (let item of arr) {
if (!result.find(el => el === item)) {
result.push(item);
}
}
return result;
}
const arr = [1, 2, 2, 3, 4, 4];
console.log(removeDuplicates(arr)); // 输出 [1, 2, 3, 4]

10. 使用every

every 方法可以用来确保数组中每个元素都唯一。


function removeDuplicates(arr) {
const result = [];
for (let item of arr) {
if (result.every(el => el !== item)) {
result.push(item);
}
}
return result;
}
const arr = [1, 2, 2, 3, 4, 4];
console.log(removeDuplicates(arr)); // 输出 [1, 2, 3, 4]

11. 使用Object作为哈希表

使用对象作为哈希表来存储已经出现过的元素。


function removeDuplicates(arr) {
const hash = {};
const result = [];
for (let item of arr) {
if (!hash[item]) {
hash[item] = true;
result.push(item);
}
}
return result;
}
const arr = [1, 2, 2, 3, 4, 4];
console.log(removeDuplicates(arr)); // 输出 [1, 2, 3, 4]

12. 使用lodash库

如果你的项目中已经引入了 lodash 库,可以直接使用 _.uniq 方法。


const _ = require('lodash');
const arr = [1, 2, 2, 3, 4, 4];
const uniqueArr = _.uniq(arr);
console.log(uniqueArr); // 输出 [1, 2, 3, 4]

以上就是我总结的12种数组去重方法,每种方法都有其适用场景,大家可以根据实际需求选择最适合自己的方式。

点赞(0)

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部