记 今天看到的数组去重问题

本文探讨了多种JavaScript数组去重的方法,包括使用双重for循环、indexOf、reduce、map以及自定义函数,展示了不同的实现思路和技术要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   let repeatArr = [1,1,1,2]
        let arr = []
        
	 第一种
      for(let i = 0; i<repeatArr.length; i++){
          for(let j = i+1;j<repeatArr.length;j++){
              if(repeatArr[i]==repeatArr[j]){
                //            0         1  
                //   如果 arr[i] == arr[j] --->将 j在i 基础上+1 ,然后再经 j++
                //   对比将变成类似 arr[1] == arr[3]  第一项等于了第二项,那么对比就从 第三项开始
                 j= ++i
                 console.log(j)
              }
          }
          arr.push(repeatArr[i])
      }


     第二种
    for(let i = 0;i<repeatArr.length;i++){
        if(arr.indexOf(repeatArr[i]) == -1){
            arr.push(repeatArr[i])
        }
    }
    今天看到第三种,觉得不错
function distinct (arr) {
	let result = []
	let obj = {}
	for( const key in arr ) {
		if( !obj[key] ) {
			result.push(arr[key])
			obj[key] = 1
		}
	}
	return result 
}
大体思想都是 没有就添加


使用 reduce 进行数组去重

/*
  reduce 接收两个参数 callback,initialValue---初始值
  callback 接收四个参数 total	必需。初始值, 或者计算结束后的返回值。 当有 initialValue 时,total = initialValue,否则数组第一项
                       currentValue	必需。当前元素。                当有 initialValue 时 currentValue = 数组第一项,否则第二项
                       currentIndex	可选。当前元素的索引
                       arr	可选。当前元素所属的数组对象。
 */   
   let arr = [1,2,3,4,5,5,3,2,4,1,2,3,5,1,2,3,3,4,1]
 //   传递初始值为 [], add = [],now = arr[0]
   let arr2 = arr.reduce((add,now)=>{
     //   此处用 concat 返回连接后的新数组,push 返回的长度
     return add.includes(now) ? add : add.concat(now)
   },[])

使用map

function noRepet(arr = []) {
	const m = new Map()
	arr.forEach((item, index) => {
		!m.has(item) ? m.set(item, index) : ''
	})
	return m.keys()
}
console.log([...noRepet([x,x,x])])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值