数组去重方法

数组去重方法

  • es6的set方法(推荐)
  • 双层循环
1.es6的set方法
let arr=[1, 2, 2, 3, 4, 3, 5]
let set6 = new Set(arr)
console.log('去重后的数组为:', set6)

输出的结果为一个set对象.

set{1,2,3,4,5}

特别注意!!!不是说使用了 new Set()就生成了去重后的数组,还需要解构这一步

const lastArr=[...set6]
//lastArr就是[1,2,3,4,5]
2.双层循环

如果有相同的值则跳过,不相同则push进数组

Array.prototype.distinct = function(){
 var arr = this,
  result = [],
  i,
  j,
  len = arr.length;
 for(i = 0; i < len; i++){
  for(j = i + 1; j < len; j++){
   if(arr[i] === arr[j]){
    j = ++i;
   }
  }
  result.push(arr[i]);
 }
 return result;
}
var arra = [1,2,3,4,4,1,1,2,1,1,1];
arra.distinct();    //返回[3,4,2,1]
3.利用splice直接在原数组进行操作

双层循环,外层循环元素,内层循环时比较值

值相同时,则删去这个值

注意点:删除元素之后,需要将数组的长度也减1.

rray.prototype.distinct = function (){
 var arr = this,
  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 a = [1,2,3,4,5,6,5,3,2,4,56,4,1,2,1,1,1,1,1,1,];
var b = a.distinct();
console.log(b.toString()); //1,2,3,4,5,6,56
4.利用indexOf以及forEach
Array.prototype.distinct = function (){
 var arr = this,
  result = [],
  len = arr.length;
 arr.forEach(function(v, i ,arr){  //这里利用map,filter方法也可以实现
  var bool = arr.indexOf(v,i+1);  //从传入参数的下一个索引值开始寻找是否存在重复
  if(bool === -1){
   result.push(v);
  }
 })
 return result;
};
var a = [1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,1,23,1,23,2,3,2,3,2,3];
var b = a.distinct();
console.log(b.toString()); //1,23,2,3

补充:forEach(),map(),filter(),find()区别

foreach()

forEach只是简单的将数组遍历,类似于军人接受检阅,但是检阅结束并不会返回任何东西,也不会改变原数组,forEach的返回永远是undefind

 let total = null
 let arr = [1,2,3]
 let result = arr.forEach(a => {
     total += a
     return a + 1
 })
 console.log(result) //undefind
 console.log(total) //6
 console.log(arr) //[1,2,3]
map()

map可以比喻成去超市买东西,你拿了一个物品清单,然后服务员帮你拿好东西,返回给你一个物品的新数组,但是对清单原数组不发生改变

let goodsList = ['apple','pear','orange']
let goods = goodList.map(good => {
 	return superMarket.getGoods(good)
})
console.log(goodsList) //['apple','pear','orange']
console.log(goods) //三个物品对象
filter()

filter()就是让男生排队身高高于180的就归入到新数组中,最后返回一个里面装着所有180+的男生的数组,不改变原数组

let highBoys = boys.filter((boy/数组当前遍历到的元素/)=> {
  return boy.highy >= 180
}
 console.log(highBoys) // [boy,boy,....]
find()

find()函数就是你去找人想找一个180的男生帮你去搬砖,只要找到第一个就停止遍历,因为只要找一个,为了减少无用的操作,虽然其他方法也能实现同样的要过,但是最好用find()

var ages = [3, 10, 18, 20];
let ageres= ages.find((age)=> 
   age >= 10
)
console.log(ageres)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值