数组去重12种方法

数组去重12种方法

方法一:Set 不是一种数据类型,是一种数据结构;成员唯一(ES6中最常用)

function unique(arr) {
  return  Array.from(new Set(arr)) // Array.from : 将set数据结构转成真正的数组;
}
var arr = [10,13,10,3,13,99,55,9,55];
console.log(unique(arr)) 

方法二:类似于方法一的set,用了剩余运算符…

let arr =[10,13,10,3,13,99,55,9,55];
let a = [...new Set(arr)];
console.log(a);

方法三:indexOf新建一个空的结果数组,for 循环原数组,判断结果数组是否存在当前元素,如果有相同的值则跳过,不相同则push进数组

function unique(ary) {
 if (!Array.isArray(ary)) { 
   console.log('type error!') 
   return 
  } 
  let newAry = [];
  for(let i=0;i<ary.length;i++){
   let  cur = ary[i];
    if(newAry.indexOf(cur)===-1){
      newAry.push(cur);
    }
  }
  return newAry;
}
var arr = [10,13,10,3,13,99,55,9,55];
console.log(unique(arr)) 

方法四:filter返回一个过滤后的新数组;如果返回true就留下,false就过滤掉

function unique(ary) {
  return ary.filter(function (item,index,a) {
    return ary.indexOf(item)===index;
  })
}
var arr = [10,13,10,3,13,99,55,9,55];
console.log(unique(arr)) 

方法五:includes方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false

function unique(ary) {
 if (!Array.isArray(ary)) { 
    console.log('type error!') 
    return 
  } 
  let newAry = [];
  let len = ary.length;
  for(let i=0;i<len;i++){
   let cur = ary[i];
    if(!newAry.includes(cur)){
      newAry.push(cur);
    }
  }
  return newAry;
}
var arr = [10,13,10,3,13,99,55,9,55];
console.log(unique(arr)) 

方法六:hasOwnProperty 检测属性名是否是对象的一个私有属性;返回一个布尔值;

function unique(ary) {
  let obj = {};
  return ary.filter(function (item,index,a) {// a : 整个数组
     return  obj.hasOwnProperty(typeof item+item)?false:obj[typeof item+item]=true;// hasOwnProperty来校验的该属性是否出现过;
  })
}
var arr = [10,13,10,3,13,99,55,9,55];
console.log(unique(arr)) 

方法七:sort

function unique(ary) {
 if (!Array.isArray(ary)) { 
    console.log('type error!') 
    return; 
  } 
  let a = ary.sort(function (a,b) {
    return a-b;
  });
  for(let i=0;i<a.length;i++){
    if(a[i]===a[i+1]){
       a.splice(i+1,1);
       i--;
     }
  }
  return a;
}
var arr = [10,13,10,3,13,99,55,9,55];
console.log(unique(arr)) 

方法八:递归

function unique(ary) {
  let  len= ary.length;
  ary = ary.sort(function (a,b) {
   return a-b;
  });
  function loop(index) {
   if(index>=1){
     if(ary[index]===ary[index-1]){
       ary.splice(index,1);
     }
     loop(index-1)
    }
  }
  loop(len-1);
  return ary;
}
var arr = [10,13,10,3,13,99,55,9,55];
console.log(unique(arr)) 

方法九:splice双层循环,外层循环元素,内层循环时比较值。值相同时,则删去这个值

function unique(ary) {
  for(let i=0;i<ary.length;i++){
    for(j=i+1;j<ary.length;j++){
      if(ary[i]===ary[j]){ //第一个等同于第二个,splice方法删除第二个   
       	ary.splice(j,1);
       	j--;
       }
     }
  }
  return ary;
}
var arr = [10,13,10,3,13,99,55,9,55];
console.log(unique(arr)) 

方法十:Map创建一个空Map数据结构,遍历需要去重的数组,把数组的每一个元素作为key存到Map中。由于Map中不会出现相同的key值,所以最终得到的就是去重后的结果

function unique(ary) {
  let newAry =new Array();   
  let map = new Map();
  for(let i=0;i<ary.length;i++){
    if(map.has(ary[i])) {  
      map.set(ary[i], true); // 如果有该key值  
    } else { 
      map.set(ary[i], false); // 如果没有该key值  
      newAry.push(ary[i]); 
    } 
  }
   return newAry  ; 
}
var arr = [10,13,10,3,13,99,55,9,55];
console.log(unique(arr)) 

方法十一:利用reduce+includes

function unique(ary) {
  return ary.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]);
}
var arr = [10,13,10,3,13,99,55,9,55];
console.log(unique(arr)) 

方法十二:some返回一个布尔值,只要一个是true,就返回true

let arr = [10,13,10,3,13,99,55,9,55];
var newArr = [];
for (let i = 0; i < arr.length; i++) {
  if (newArr.some(item => item == arr[i])) {
    continue; // 继续循环
  }
  newArr.push(arr[i]);
}
console.log(newArr);
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值