✊不积跬步,无以至千里;不积小流,无以成江海
思路
方法一:使用 Set
return Array.from(new Set(a))
方法二:计数排序
思路:
- 定义一个普通对象map
- 遍历这个map
- 定义number为a的第i个
- 如果number在map里面,则用continue继续遍历
- 如果不在map里面,则定义number = true
- 如果是稀疏数组(即存在null或undefined),则直接continue跳过
- 返回map的所有key
相当于遍历数组,把所有的key放到map上面;然后遍历map把map上面的key再放到数组上
但这种方法有一个问题,就是由于输出都是字符串【map的key只能为symbol或者string】
方法三:使用map
- 定义一个map为new map
- 由于这个map只能用get/set取值,所以不能再使用
map[nubmer],要用set使number为true
这样就能够区分任何的数组;因为map的key可以为任何类型
实现
方法二:
var uniq = function(a){
var map = {}
for(let i=0;i<a.length;i++){
let number = a[i]
if(number === undefined){continue}
if(number in map){continue}
map[nubmer] = true
}
return object.keys(map)
//如果不能用keys
//const result = []
//for (let key in map){
// result.push(key)
//}
//return result
}
方法三(更改处用//标识):
var uniq = function(a){
//var map = new Map()
for(let i=0;i<a.length;i++){
let number = a[i]
if(number === undefined){continue}
// if(map.has(number)){continue}
//map.set(number, true)
}
//return [...map.keys()]
}