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

tech2023-01-20  127

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(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) },[])
最新回复(0)