类型一: 找出数组 arr 中重复出现过的元素。
用例:
方法1: 集合和HashMap都是求解去重这类题型非常好用的方法,这里我就用HashMap来求解。对于HashMap,大家都不陌生,是用于存储键值对,所以我们就会想到遍历一遍数组arr,将其每个值对应的出现的次数以(key,value)的形式存储,具体操作见如下代码:
function duplicates(arr) {
var map = new Map()
var newArr = []
arr.forEach(item => {
// 先判断item是否有在map中
if (map.get(item) === undefined) {
// 如果不在,那么先设置key,并且初始化出现次数为1
map.set(item, 1)
} else {
// 如果在,那么就让key对应的value++
let value = map.get(item) + 1
map.set(item, value)
}
})
// 遍历map,将value(即key出现的次数 > 1)的键加入数组中
map.forEach((value, key) => {
if (value > 1) {
newArr.push(key)
}
})
return newArr
}
方法2: 除了使用HashMap的方式,我们还可以这么想:如果在遍历数组的过程中,某个元素item,其首次出现的位置和最后一次出现的位置不相同,那么就可以代表说item出现的次数必定 > 1, 所以此时我们就可以用一个临时数组temp来存储这些出现次数大于1的元素,具体代码如下所示:
function duplicates(arr) {
let temp = [] // 临时数组
arr.forEach(item => {
/**
* 1. arr.indexOf 首次出现位置
* 2. arr.lastIndexOf 最后一次出现的位置
*/
if (arr.indexOf(item) !== arr.lastIndexOf(item)
&& temp.indexOf(item) == -1) {
temp.push(item)
}
})
return temp
}
欢迎大家评论哦!!