SOURCE

//method_1:for/for in/+sort 先进行排序,然后判断排序之后的前一个数据是否等于后一个数据,如果是且结果数组没有这个元素

//for 运行时间:1596ms 占用内存:77772k
function duplicates(arr) {
    let resArr = [];
    arr.sort();
    for(let i=0;i<arr.length;i++){
        if(arr[i]==arr[i-1] && resArr.indexOf(arr[i])==-1){
            resArr.push(arr[i]);
        }
    }
    return resArr;
}
//for in  运行时间:1132ms占用内存:77868k
function duplicates(arr) {
    let resArr = [];
    arr.sort();
    for(i in arr){
        if(arr[i]==arr[i-1] && resArr.indexOf(arr[i])==-1){
            resArr.push(arr[i]);
        }
    }
    return resArr;
}

// method_2:forEach 利用索引判断是否重复(使用了两次)

function duplicates(arr) {
    var resArr=[];
    arr.forEach(v => {
     //判断原数组是否有重复数据
     //判断结果数组是否已经具有该数据
       if(arr.indexOf(v) !=arr.lastIndexOf(v) && resArr.indexOf(v) == -1){
           resArr.push(v);
       }
    });
    return resArr;
}

//method_3:reduce 先判断数组中元素出现的次数,如果大于1并且结果数组之前无此元素,则将这个元素放到结果数组中

// 运行时间:1129ms 占用内存:77776k
function duplicates(arr) {
   let b = [];
   let resArr = [];
   for (let i= 0; i<arr.length; i++){
        b[i] = arr.reduce( (init,curr)=> {
        //如果当前置等于item,该函数值加一
           return curr === arr[i] ? init+1:init;
           },0)
           if (b[i] > 1 && resArr.indexOf(arr[i]) === -1){
               resArr.push(arr[i]);
           }
        }
    return resArr;
}
console 命令行工具 X clear

                    
>
console