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