javaScript 数组去重

本文介绍了三种JavaScript数组去重的方法:1.1 嵌套for循环去重,通过遍历数组并删除重复元素;1.2 利用Set数据结构去重,Set的特性保证了元素唯一性;1.3 使用includes()方法结合循环,只保留未出现在结果数组中的元素。此外,还讲解了处理结构复杂数组去重的两种方式:2.1 通过对象属性判断key值是否存在来去重;2.2 使用reduce()方法结合对象属性去重。
摘要由CSDN通过智能技术生成

一、结构简单的数组去重

1.1  嵌套for循环去重

function unique(arr){
   for(let i = 0;i<arr.length;i++){
       //由于嵌套的for循环也是遍历相同数组,则相同位置肯定一样,所以跳过相同位置的元素校验,故取j=i+1 (即拿当前元素跟它后面的所有元素比较)
	   for(let j = i+1;j<arr.length;j++){ 
		   if(arr[i]  === arr[j]){
			   arr.splice(j,1);
	 		   j--; //上面去掉数组的一个元素,索引发生变化,j--为了确保继续校验下一个元素
	        }
	    } 
    }
    //返回过滤后数组
    return arr   
}  

let arr1 = [1,2,2,3,5,5] 
let uniqueArr = unique(arr1)

1.2  利用set数据结构去重

//set数据结构的数据具有唯一性 Array.from将其转化为真正的数组
function unique(arr){
   return Array.from(new Set(arr))
}

let arr1 = [1,2,2,3,5,5]   
let uniqueArr = unique(arr1)

1.3  利用includes()方法去重

let arr1 = [1,2,2,3,5,5]   
function unique(arr) {
  let result = []
  for(let i = 0;i<arr.length;i++){
    //将result不包含的遍历项push进去
    result.includes(arr[i]) ? "" :  result.push(arr[i]) 
  };
  return result
}

let uniqueArr = unique(arr1)

二、结构复杂的数组去重

2.1 对象访问属性的方法 判断对象中是否存在key

function unique(arr){
	let result = []  
	let obj = {}   //用于存储未重复前的key为true
	for(let i = 0;i<arr.length;i++){
		if(!obj[arr[i].key]){
			result.push(arr[i]) 
			obj[arr[i].key] = true  //下一次循环数组里有相同的key时则便无法进入if代码块,故而实现去重
		}
	}
	return result
}

let arr1 = [
	{key:"1",value:"张三"},
	{key:"2",value:"赵六"},
	{key:"1",value:"张三"}
]
let uniqueArr = unique(arr1)

2.2 reduce()遍历数组,reduce()第一个参数是遍历项要执行的函数,第二个参数为preV的初始值;

去重思想还是访问对象属性,判断key值是否存在,只是由for循环变成了reduce()方法。

(注:reduce()方法若没有第二个参数则初始值为数组第一个元素)

let arr1 = [
	{key:"1",value:"张三"},
	{key:"2",value:"赵六"},
	{key:"1",value:"张三"}
]
let obj = {}
//preV的初始值为[]
let uniqueArr = arr1.reduce((preVal,item)=>{
	obj[item.key] ? "": obj[item.key] = true && preVal.push(item);
	return preVal
},[])

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值