下面是详细讲解“js数组去重的11种方法”的完整攻略。
引言
在JavaScript开发中,常常需要我们对数组进行去重的操作。由于JavaScript本身没有提供去重的方法,开发者需要结合一些技巧和方法来完成这个任务。本文将由浅入深介绍11种JavaScript数组去重的方法,希望对大家有所帮助。
方式一:使用Set类型
Set是一种新的ES6数据类型,它存储的是独一无二的值,可以用来轻松去重。具体代码如下:
const arr = [1, 2, 3, 2, 1];
const newArr = [...new Set(arr)];
console.log(newArr); // [1,2,3]
方式二:使用Map类型
Map是JavaScript中的一种数据结构,它存储键值对,可以用来解决数组去重的问题。具体代码如下:
const arr = [1, 2, 3, 2, 1];
const map = new Map();
const newArr = [];
arr.forEach(item => {
if (!map.has(item)) {
map.set(item, true);
newArr.push(item);
}
});
console.log(newArr); // [1,2,3]
方式三:使用Object类型
利用对象属性唯一的特性,我们可以使用Object类型进行数组去重。具体代码如下:
const arr = [1, 2, 3, 2, 1];
const obj = {};
const newArr = [];
arr.forEach(item => {
if (!obj[item]) {
obj[item] = true;
newArr.push(item);
}
});
console.log(newArr); // [1,2,3]
方式四:使用filter方法
使用filter方法可以遍历数组,返回由符合条件元素组成的新数组。具体代码如下:
const arr = [1, 2, 3, 2, 1];
const newArr = arr.filter((item, index, arr) => {
return arr.indexOf(item) === index;
});
console.log(newArr); // [1,2,3]
方式五:使用reduce方法
使用reduce方法可以遍历数组,返回一个新的累加结果,可以用来进行数组去重。具体代码如下:
const arr = [1, 2, 3, 2, 1];
const newArr = arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
console.log(newArr); // [1,2,3]
方式六:使用for循环
使用for循环可以遍历数组,使用indexOf方法判断当前元素是否已经存在于新的数组中。具体代码如下:
const arr = [1, 2, 3, 2, 1];
const newArr = [];
for (let i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
console.log(newArr); // [1,2,3]
方式七:使用includes方法
使用includes方法判断当前元素是否已经存在于新的数组中,如果不存在则添加到新数组中。具体代码如下:
const arr = [1, 2, 3, 2, 1];
const newArr = [];
arr.forEach(item => {
if (!newArr.includes(item)) {
newArr.push(item);
}
});
console.log(newArr); // [1,2,3]
方式八:使用some方法
使用some方法可以遍历数组,判断是否有一个元素符合条件,可以用来进行数组去重。具体代码如下:
const arr = [1, 2, 3, 2, 1];
const newArr = [];
arr.forEach(item => {
if (!newArr.some(val => val === item)) {
newArr.push(item);
}
});
console.log(newArr); // [1,2,3]
方式九:使用排序去重
使用数组排序可以去除重复元素,具体代码如下:
const arr = [1, 2, 3, 2, 1];
const newArr = [];
arr.sort().forEach((item, index, arr) => {
if (item !== arr[index - 1]) {
newArr.push(item);
}
});
console.log(newArr); // [1,2,3]
方式十:使用集合算法去重
使用集合算法可以将复杂度优化到O(n),具体代码如下:
const arr = [1, 2, 3, 2, 1];
const newArr = Array.from(new Set(arr));
console.log(newArr); // [1,2,3]
方式十一:使用链表
使用链表可以在保证去重效果的同时,避免数组在删除元素时造成的性能问题。具体代码如下:
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
class LinkedList {
constructor() {
this.head = null;
this.tail = null;
}
add(data) {
const node = new Node(data);
if (!this.head) {
this.head = node;
this.tail = node;
} else if (this.tail.data !== data) {
this.tail.next = node;
this.tail = node;
}
return this;
}
toArray() {
const arr = [];
for (let node = this.head; node; node = node.next) {
arr.push(node.data);
}
return arr;
}
}
const arr = [1, 2, 3, 2, 1];
const list = new LinkedList();
arr.forEach(item => list.add(item));
const newArr = list.toArray();
console.log(newArr); // [1,2,3]
结语
以上就是11种JavaScript数组去重的方法,希望对大家有所帮助。当然,在实际开发中,不同的场景可能需要选择不同的方法,大家可以根据自己的业务需求来选择最合适的方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js数组去重的11种方法 - Python技术站