思路:使用myset记录数组中元素,使用res记录数组中重复的元素。遍历arr,如果myset中存在当前元素,则表示该元素重复,故将该元素加入res,反之则将该元素加入myset,最后返回res即可。

function duplicates(arr) 
{
    let myset=new Set()
    let res=new Set()
    for(let val of arr)
    {
        if(myset.has(val))
            res.add(val)
        else
            myset.add(val)
    }
    return [...res]
}

总结:set.has(x)判断set中是否包含x;set.add(x)将x加入set。

扩展:使用res表示重复元素,使用forEach遍历数组arr,使用indexOf和lastIndexOf判断数组arr中是否存在至少两次元素,使用indexOf判断数组res中是否不存在该元素,当这两者均满足时,则将元素加入res。

function duplicates(arr) 
{
    let res=[]
    arr.forEach(x=>{
        if(arr.indexOf(x)!=arr.lastIndexOf(x)&&res.indexOf(x)==-1)
            res.push(x)
    })
    return res
}

总结:indexOf方法返回指定元素在数组中首次出现的索引位置。如果数组中不存在该元素,则返回 -1;lastIndexOf方法返回指定元素在数组中最后一次出现的索引位置。如果数组中不存在该元素,则返回 -1。