数组去重

写在前面:大学时没有刷过的算法题迟早要补回来,计划是先去网上找一些经典的算法题,如数组排序,去重等等,然后再去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