数组去重

写在前面:大学时没有刷过的算法题迟早要补回来,计划是先去网上找一些经典的算法题,如数组排序,去重等等,然后再去leetcode由简至难按照标签继续刷题,我也会在博客里持续更新我刷的题目,感兴趣的话欢迎关注我

1.利用ES6的set方法

function unique(arr){
   return Array.from(new Set(arr));
}

// 测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array));  // [1, 2, 3, 4, 55, 5, 66, 77]

2.利用对象属性存在的特性,如果没有该属性则存入新数组

function unique(arr){
    var res  = [];
    var obj = {};
    for(var i=0;i<arr.length;i++){
        if(!obj[arr[i]]){
            obj[arr[i]]=1;
            res.push(arr[i]);
        }
    }    
    return res
}

//测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array));  // [1, 2, 3, 4, 55, 5, 66, 77]

3.利用数组的indexOf/lastIndexOf 下标属性来查询

  function unique(arr){
    var res   = [];
    for(var i=0;i<arr.length;i++){
        if(res.indexOf(arr[i])==-1){
            res.push(arr[i]);
        }
    }
    return res;
}
//测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array));  // [1, 2, 3, 4, 55, 5, 66, 77]

4.利用数组原型对象上的includes方法

function unique(arr){
  var res  =[];
  for(var i=0;i<arr.length;i++){
      if(!res.includes(arr[i])){
          res.push(arr[i])
      }
  }
  return res
}
//测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array));  // [1, 2, 3, 4, 55, 5, 66, 77]

5.利用数组原型上的filter和include方法

function unique(arr){
    var res=[];
    res=arr.filter(function(item){
      return res.includes(item)?'':res.push(item);
          });
    return res;
}
//测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array));  // [1, 2, 3, 4, 55, 5, 66, 77]


6.利用数组原型的forEach和includes方法

function unique(arr){
    var  res=[];
    arr.forEach(function(item){
        if(!res.includes(item)){
            res.push(item);
        }
    }) 
    
    return res;
}
//测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array));  // [1, 2, 3, 4, 55, 5, 66, 77]


7.利用数组原型对象上的splice方法

function unique(arr){
var i,j,len=arr.length;
for(i=0;i<len;i++){
    for(j = i+1;j<len;j++){
        if(arr[i]==arr[j]){
            arr.splice(j,1);
            len--;
             j--;
        }
    }
}
return arr
}
//测试
var array=[1,2,3,4,55,5,55,66,66,66,77];
console.log(unique(array));  // [1, 2, 3, 4, 55, 5, 66, 77]

8.复杂数组去重,判断单一固定属性值相同,则为重复数据


  var studentList=[
    {name:'Anna',age:22,schoolCode:111111},
    {name:'Jessica',age:25,schoolCode:222222},
    {name:'Alex',age:27,schoolCode:111111}
  ];
  
  var resultArr=[];
  
  var i,j,len=studentList.length;
  
  for(i=0;i<len;i++){
    for(j=i+1;j<len;j++){
        if(studentList[i].schoolCode===studentList[j].schoolCode){
            j=++i;
            
        }
    }      
   resultArr.push(studentList[i])   
  }
  console.log(resultArr)

转载于:https://www.cnblogs.com/JessicaIsEvolving/p/8585868.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值