浅谈JavaScript数组去重

在开发时总会遇到这样的需求,就是不要保存重复的数据,要不然会造成数据多余,内存浪费。所以要去重

1、ES6的Set

基本思路:利用Set对象的去重

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

2、filter过滤

基本思路:利用filter对数组进行过滤,过滤条件就是第一次出现的值和它的索引相对应。第二次出现该值时,arr.indexOf(item)还是第一次的index,所以去除掉。

function unique1(arr){
	return arr.filter((item,index)=>{
		return arr.indexOf(item) === index
	})
}

3、后移去重法

基本思路:还是利用了indexOf,判断条件和上一个方法差不多,就把重复的值移动的后面,然后截取数组。

function unique2(arr){
	let right = arr.length - 1;
	for(let i=0;i<arr.length;i++){
		if(right <= i){
			break;
		}
		if(arr.indexOf(arr[i]) !== i){
			[arr[i],arr[right]] = [arr[right],arr[i]]
			right--;
			i--;
		}
	}
	return arr.slice(0,right)
}

4、reduce去重法

基本思路:利用了indexOf,初始值为一个空数组,如果该空数组已有当前值cur则不添加进空数组,否则添加进去。

function unique3(arr){
	return arr.reduce((pre,cur)=>{
		if(pre.indexOf(cur) === -1){
			pre.push(cur)
		}
		return pre;
	},[])
}

5、sort排序去重法

基本思路:先排序,后判断,然后相邻两个值不相等则添加进新数组,否则不添加。

function unique4(arr){
	arr.sort();
	let newArray = [];
	for(let i =0;i<arr.length;i++){
		if(arr[i] !== arr[i+1]){
			newArray.push(arr[i])
		}
	}
	return newArray;
}

6、includes去重法

基本思路:利用了数组的includes方法,新建一个空数组,然后该空数组不包含当前值item则添加进去,否则不添加

function unique5(arr){
	let newArray = [];
	arr.forEach((item)=>{
		if(!newArray.includes(item)){
			newArray.push(item)
		}
	})
	return newArray;
}

7、Map去重法

基本思路:利用了Map对象的键值不重复,也就是拿一个对象来保存已有数据,然后判断是否已有该键值,有则跳过;否则添加,然后把数值push进一个数组中。

function unique6(arr){
	let newArray = [];
	let tmp = new Map()
	for(let i=0;i<arr.length;i++){
		if(!tmp.get(arr[i])){
			tmp.set(arr[i],1)
			newArray.push(arr[i])
		}
	}
	return newArray
}

数组去重方法很多,还需慢慢探索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值