2023-08-10 00:24:35
JavaScript中利用Set集合去重是一种简洁高效的方式,以下是详细介绍:
Set去重的基本方法Set对象天生具备去重特性,将数组转换为Set再转回数组即可实现去重。
function uniqueArray(arr) { return [...new Set(arr)];}// 示例const myArray = [1, 2, 2, 3, 4, 4, 5];const uniqueArrayResult = uniqueArray(myArray);console.log(uniqueArrayResult); // 输出: [1, 2, 3, 4, 5]核心原理:new Set(arr)创建包含arr中所有唯一值的Set对象,扩展运算符...将Set对象转换回数组。
优势:
应对方法:对于包含NaN或对象的数组,可使用filter和indexOf,或使用第三方库如Lodash。
Set用于其他数据结构的间接去重Set主要用于数组去重,但可间接用于其他数据结构去重。例如,先将链表或树转换为数组,使用Set去重,再将结果转换回原始数据结构。
// 假设链表有toArray()方法将其转换为数组class LinkedList { constructor() { this.head = null; } toArray() { let arr = []; let current = this.head; while(current) { arr.push(current.data); current = current.next; } return arr; }}// 示例使用const linkedList = new LinkedList();// ... 向链表添加数据 ...const arrayFromLinkedList = linkedList.toArray();const uniqueArrayFromLinkedList = [...new Set(arrayFromLinkedList)];// 然后将uniqueArrayFromLinkedList转换回链表注意事项:需根据具体数据结构调整转换过程,确保不丢失关键信息。
根据对象属性去重的复杂场景处理当需要根据对象某个属性去重时,Set无法直接实现,可使用Map或reduce方法。
function uniqueArrayByProperty(arr, property) { const map = new Map(); return arr.filter((item) => { if (!map.has(item[property])) { map.set(item[property], true); return true; } return false; });}// 示例const myArray = [{id: 1, name: 'A'}, {id: 2, name: 'B'}, {id: 1, name: 'C'}];const uniqueArrayById = uniqueArrayByProperty(myArray, 'id');console.log(uniqueArrayById); // 输出: [{id: 1, name: 'A'}, {id: 2, name: 'B'}]原理:使用Map存储已出现过的属性值,用filter过滤掉重复对象。
优势: