数组去重的方法总结

利用es6中的set

利用了es6中Set方法自身的特性,数据不重复来实现去重,Set自动过滤重复元素

	 function unique(arr){
		return Array.from(new Set(arr))  //Array.from对数组浅拷贝也可以写成[...new Set(arr)]通过...拓展运算符 
	 }
	 var arr = [1,2,3,4,2,2,4,6,null,null]
	 console.log(unique(arr))  //[1,2,3,4,6,null]

双层循环
外层从第一项开始遍历,内层循环从而第二项开始遍历,如果两项值相等,则利用splice从原数组中去除

	var arr = [1,2,3,4,3,2,5,6,2,null,null]
		for (var i = 0; i < arr.length; i++) {
			for(var j=i+1;j<arr.length;j++){
				if(arr[i] === arr[j]){
					arr.splice(j,1)
				}
			}
		}
		console.log(arr)  //[1,2,3,4,5,6,null]

利用indexOf()
利用indexOf去判断值在不在空数组中,如果不存在则则追加进空数组中

		let arr = [1,2,3,4,2,4,6,7]
		var res = []
		for(var i = 0;i<arr.length;i++){
			if(res.indexOf(arr[i])===-1){
				res.push(arr[i])
			}
		}
		console.log(res) [1, 2, 3, 4, 6, 7]

Array.filter()
利用Array.filter()方法来过滤元素,判断该元素第一次出现的位置与当前位置是否相同,相同则没重,否则重复

let arr = [1,2,3,4,3,5,3]
		function unique(){
			return  arr.filter(function(item, index){
		        return arr.indexOf(item) === index;
		    });
		}
		console.log(unique())  [1, 2, 3, 4, 5]

相邻元素进行比较

用过Sort方法先进行排序相邻的进行比较,相同则重复

let arr = [1,2,6,3,2,8,4,3]
		console.log(arr.sort())
		arr.sort().forEach((item,index)=>{
			if(item===arr[index+1]){
				console.log(item,arr[index+1])
				arr.splice(index,1)
			}
		})
		console.log(arr)  [1, 2, 3, 4, 6, 8]

利用对象属性去重
利用对象的键不重复的特性,建一个空对象,判断对象中是否有以当前值命名的,如果没有把当前值追加到空数组,给当前对象的这个键赋值

let res = []
		let obj = {}
		let arr = [1,4,7,3,8,null,4,7,1,2,null]
		for(let i = 0;i<arr.length;i++){
			if(!obj[arr[i]]){
				res.push(arr[i])
				obj[arr[i]]=true
			}
		}
		console.log(res) [1, 4, 7, 3, 8, null, 2]

利用includes
遍历数组,创建一个空的数组,使用includes判断当前元素是否在空数组中,不存在则追加进去、

		let arr = [1,2,4,6,2,5,3]
		let res = []
		arr.forEach(e=>{
			if(!res.includes(e)){
				res.push(e)
			}
		})
		console.log(res) [1, 2, 4, 6, 5, 3]

上面的几种方法,双层循环的消耗是最多的,利用对象去重的这种方法是最快的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值