返回
数组去重小课堂:揭秘常用与不常用去重方法
前端
2023-10-13 19:26:11
前言
数组去重是前端开发中经常遇到的问题,也是算法面试中的常见题型。本文将详细介绍数组去重的常用方法和一些不常见的技巧,帮助您全面掌握数组去重的各种解法。
常规问题
假设我们有一个数组 arr = ['shanghai', 'beijing', 'shanghai', 'shenzhen', 'beijing', 'guangzhou']
,如何快速从中去除重复元素,得到一个不包含重复元素的新数组?
常规方法
-
使用
Set
数据结构Set
数据结构可以自动去除重复元素,因此我们可以将数组中的元素插入到Set
中,然后再将其转换为数组。这种方法简单易懂,但需要浏览器支持Set
数据结构。const arr = ['shanghai', 'beijing', 'shanghai', 'shenzhen', 'beijing', 'guangzhou']; const uniqueArr = [...new Set(arr)]; console.log(uniqueArr); // 输出:['shanghai', 'beijing', 'shenzhen', 'guangzhou']
-
使用
indexOf
和lastIndexOf
方法我们可以使用
indexOf
和lastIndexOf
方法来查找数组中元素的第一次出现和最后一次出现的位置。如果元素的第一次出现和最后一次出现的位置相同,则说明该元素没有重复。const arr = ['shanghai', 'beijing', 'shanghai', 'shenzhen', 'beijing', 'guangzhou']; const uniqueArr = []; for (let i = 0; i < arr.length; i++) { if (arr.indexOf(arr[i]) === arr.lastIndexOf(arr[i])) { uniqueArr.push(arr[i]); } } console.log(uniqueArr); // 输出:['shanghai', 'beijing', 'shenzhen', 'guangzhou']
-
使用
filter
方法我们可以使用
filter
方法来过滤掉数组中的重复元素。const arr = ['shanghai', 'beijing', 'shanghai', 'shenzhen', 'beijing', 'guangzhou']; const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index); console.log(uniqueArr); // 输出:['shanghai', 'beijing', 'shenzhen', 'guangzhou']
不常见的技巧
-
使用
reduce
方法我们可以使用
reduce
方法来将数组中的元素聚合为一个不包含重复元素的新数组。const arr = ['shanghai', 'beijing', 'shanghai', 'shenzhen', 'beijing', 'guangzhou']; const uniqueArr = arr.reduce((acc, item) => { if (!acc.includes(item)) { acc.push(item); } return acc; }, []); console.log(uniqueArr); // 输出:['shanghai', 'beijing', 'shenzhen', 'guangzhou']
-
使用
Object.keys()
方法我们可以使用
Object.keys()
方法来获取一个对象的所有键名,而这些键名就是数组中不重复的元素。const arr = ['shanghai', 'beijing', 'shanghai', 'shenzhen', 'beijing', 'guangzhou']; const uniqueArr = Object.keys(arr.reduce((acc, item) => { acc[item] = true; return acc; }, {})); console.log(uniqueArr); // 输出:['shanghai', 'beijing', 'shenzhen', 'guangzhou']
总结
本文介绍了数组去重的多种方法,包括常规方法和一些不常见的技巧。希望这些方法能够帮助您更好地理解和掌握数组去重。如果您有更好的解法,欢迎在评论区分享。