JS常见操作(二)

类型一: 找出数组 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
}

欢迎大家评论哦!!

猜你喜欢

转载自blog.csdn.net/yldd_ldd/article/details/113432512