方法一、先排序再判断

  先对数组进行排序,判断前一个与后一个相等且不在新数组中的情况下,再把元素放到新数组中去。

        Array.prototype.duplicates=function () {
            var arr = this;
            var newArr=[];
            arr.sort();
            for(var i =0;i<arr.length;i++){
                if(arr[i]==arr[i+1]&&(newArr.indexOf(arr[i])==-1) ){
                    newArr.push(arr[i]);
                    i++;

                }
            }

            return newArr;
        }
        var a = [1,2,5,4,2,3,1,4,5,3,4];
        console.log(a.duplicates());//结果为[1,2,3,4,5]

方法二、两个for循环

  数组中的每一个数均和后面的所有数进行比较,如果存在相等的数且不在新数组中,将该数加到新数组中。

 

Array.prototype.duplicates=function () {
    var arr = this;
    var a=[];
    for(var i=0;i<arr.length-1;i++) {
        for(var j=i+1;j<arr.length;j++) {
            if(arr[i]==arr[j]&&a.indexOf(arr[i])==-1)  {
                a.push(arr[i]);
            }
        }
    }
    return a.sort();
}
var a = [1,2,5,4,2,3,1,4,5,3,4];
console.log(a.duplicates());//结果为[1,2,3,4,5]

 

方法三、判断同一个数字的从前往后和从后往前位置是否一致

  循环数组中的每一个数,将从前往后第一次出现的位置和从后往前第一次出现的位置进行比较,如果不想等,说明该数重复。并且该数不在新数组中,将该数加到新数组后面。

Array.prototype.duplicates=function (){
    var arr = this;
    var result = [];
    arr.forEach(item=>{
        if(arr.indexOf(item)!==arr.lastIndexOf(item)&&result.indexOf(item)==-1){
            result.push(item);
        }
    })
    return result;

}
var a = [1,2,5,4,2,3,1,4,5,3,4];
console.log(a.duplicates());//结果为[1, 2, 5, 4, 3]