本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一. 利用排序 后再对数组是否有重复来去重
let arr = [1,2,2,2,3,33,44,4,44,22]
console.log(arr.sort((a,b)=>a-b));
let a = arr.sort((a,b)=>a-b)
function clearRepeat(arr){
let result = [arr[0]]
for (let i =1 ;i<arr.length;i++){
arr[i] != result[result.length-1] && result.push(arr[i])
}
console.log(result);
}
console.time("str")
clearRepeat(arr)
console.timeEnd("str")
二. ES6 的Set 集合 去重 (高性能) set可以接受一个数组参数并返回一个不重复的对象
function unique(arr){
// let x = new Set(arr)
// return [...x]
return Array.from(new Set(arr)) // 简便写法
// return Array.from(new Set([...arr]))
}
console.time("str")
console.log(unique(arr));
console.timeEnd("str")
三.filter 数组过滤函数 并对其重排序 (简洁)
let b =arr.filter((item,index)=>{
return arr.indexOf(item) == index
}).sort((a,b)=>a-b)
console.time("str")
console.log(b);
console.timeEnd("str")
四 . 哈希思想(高性能)
主要思路创建一个对象存储记录该数据的一个状态
function unique(arr){
let result =[]
let hash = {}
for(let i of arr){
if(!hash[i]){
result.push(i)
hash[i] = true
}
}
return result.sort((a,b)=>a-b)
}
console.time("str")
console.log(unique(arr));
console.timeEnd("str")
五. 利用indexOf 方法 有重复时会返回第一个数的下标 没找到时返回-1
function unique1(arr){
let result = []
for(let i=0;i<arr.length;i++){
if(result.indexOf(arr[i]) == -1){
result.push(arr[i])
}
}
return result
}
六.利用includes 方法 当result 数组中没有值时添加进去
function unique2(arr){
let result =[]
for(let i of arr){
!result.includes(i) && result.push(i)
}
return result
}
七 找到重复的数组
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
// 哈希算法
var findRepeatNumber = function(nums) {
let hash = {}
for(let i of nums){
if(!hash[i]){
hash[i] = true
}else{
return i
}
}
};