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

这是牛客网的题目,自己总结了几种其他人做的方法,供自己借鉴。
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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值