let a1 = [1,1,2,3,2,3,1]
let uniq = function(a){
return Array.from(new Set(a))
}
uniq(a1)
2.使用计数排序的思路,缺点是只支持字符串
let arr = [1,2,3,1,2,3]
const q = function(a){
let map = {}
for(let i = 0; i<a.length; i++){
let num = a[i]
if( !num ){ continue } // 当前值为空或者已经存在于map的值都忽略,剩下的就是map里没有过的新值
if( num in map){ continue }
map[num] = ''
}
const result = []
for(let key in map){ // 把map的key 赋值给result,得到去重后的数组,但只能是字符串,因为key是字符串
result.push(key)
}
return result
}
console.log(q(arr))
3.map去重,优点是完美去重,支持所有类型展示,缺点是兼容性较差,旧浏览器可能不兼容
let arr = [1, 2, true, 3, true,
1, undefined, 2, 'string', 'string', [1, 33, 22], [1, 33, 22],
null, 3, () => { console.log('hello world') },
() => { console.log('hello world') }, { one: 1 }, { one: 1 }]
//对象,数组,函数,不能去重,因为在内存里的地址是不一样的
var q = function (a) {
var map = new Map()
for (let i = 0; i < a.length; i++) {
let number = a[i] // 1 ~ 3
if (!number) { continue }
if (map.has(number)) {
continue
}
map.set(number, true)//键值对,键是number,值设置为 ture, 1=>true, 2=>true, fn=>true ...
}
console.log(map)
return [...map.keys()] // 把键提取出来放到数组里
}
console.log(q(arr))