JS找出数组 arr 中重复出现过的元素

来源:互联网 发布:mac粉底液哪个最白 编辑:程序博客网 时间:2024/05/20 23:38

这是牛客网的题目,自己总结了几种其他人做的方法,供自己借鉴。
JS找出数组 arr 中重复出现过的元素

输入例子:duplicates([1, 2, 4, 4, 3, 3, 1, 5, 3]).sort()输出例子:[1, 3, 4]

1.这个应该好理解。 先对数组进行排序,判断前一个与后一个相等且没有保存的情况下,再把元素放到数组中去。

function duplicates(arr) {    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;}

2.

function duplicates(arr) {  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();}

3.

function duplicates(arr) { //声明两个数组,a数组用来存放结果,b数组用来存放arr中每个元素的个数     var a = [],b = [];     //遍历arr,如果以arr中元素为下标的的b元素已存在,则该b元素加1,否则设置为1     for(var i = 0; i < arr.length; i++){         if(!b[arr[i]]){             b[arr[i]] = 1;             continue;         }         b[arr[i]]++;     }     //遍历b数组,将其中元素值大于1的元素下标存入a数组中     for(var i = 0; i < b.length; i++){         if(b[i] > 1){             a.push(i);         }     }     return a;}

4.

function duplicates(arr) { var brr = [];    arr.sort(); //原数组排序;    while(arr.length > 0){        if(arr.indexOf(arr[0]) != arr.lastIndexOf(arr[0])){ //当值得第一个index != 最后一个index,即认为该值重复,将其赋予brr数组,并删除arr数组中所有与该值相同的值。            brr.push(arr[0]);            arr.splice(arr.indexOf(arr[0]),arr.lastIndexOf(arr[0]));        }else{//当第一个index = 最后一个index,即该值不重复。直接删除。            arr.shift();        }    }    return brr;}

5.

function duplicates(arr) {    var newArr = [];    for(var i=0;i<arr.length;i++){        var count = 0;        for(var j=0;j<arr.length;j++){            if(arr[i]===arr[j]){                count++;            }        }        if(count>1 && newArr.indexOf(arr[i])===-1){            newArr.push(arr[i]);        }    }    return newArr;}
0 0