1、利用 indeOf 与 lastIndexOf 的返回值不一致,判断重复出现过:
function duplicates(arr) {
    let newArr = [];
    arr.forEach((el, index)=>{
        if(newArr.indexOf(el) == -1 && arr.indexOf(el) !== arr.lastIndexOf(el)){
            newArr.push(el);
        }
    })
    return newArr;
}

2、利用数组排序,然后通过对比当前元素与后一个相同但与前一个不同去找到重复出现的元素:
function duplicates(arr) {
    let newArr = arr.sort();
    return newArr.filter((el, index)=> el == newArr[index+1] && el != newArr[index-1])
}

3、直接使用filter + index + lastIndexOf 去判断重复:
function duplicates(arr) {
    return arr.filter((el, i)=>arr.lastIndexOf(el) != i  &&  i == arr.indexOf(el))
}

4、利用forEach与Object的特性判断数组中存在重复【此方法循环次数较多,不建议使用,在此处写出来主要是扩展一下思路】

function duplicates(arr) {
  let obj = {}, newArr= [];
  arr.forEach(item=>{
    if(obj[item]){
      obj[item]++
    }else{
        obj[item] = 1;
      }
  })
  for(key in obj){
      if(obj[key] > 1){
        newArr.push(key);
      }
  }
  return newArr;
}