思路:使用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。



京公网安备 11010502036488号