1、遍历 新建一个新数组,对传入的数组遍历,新数组种没有的就添加进去。
function arrayUnique(array){
var result=[]
for(var i = 0;i<arr.length;i++){
if(result.indexOf(array[i])===-1){
result.push(array[i])
}
}
return result
}
2、利用对象键值对
function arrayUnique2(array){
var obj={},result={},val,type
for(var i = 0; i<arr.length; i++){
val = array[i]
type = typeof val
if(!obj[val]){
obj[val] = [type]
result.push(val)
} else if(obj[val].indexOf(type) < 0){
//判断数据类型是否存在
obj[val].push(type)
result.push(val)
}
}
return result
}
3、先排序,在去重
function arrayUnique3(array){
var result = [array[0]]
array.sort(function(a,b){return a-b})
for(var i = 0;i < array.length; i++){
if(array[i]!== result[result.length-1){
result.push(array[i])
}
}
return result
}
4、优先遍历数组 (双重循环)
function arrayUnique4(array){
var res=[]
for(var i=0,l=array.length;i<array.length;i++){
for(var j=i+1;j<l;j++){
//依次比较,相同则更改索引
if(array[i]===array[j]){
j=++i
}
}
//每轮比较完毕,索引为i的值为数组中只出现一次的值
res.push(array[i])
}
return res
}
5、基于reduce()函数
function arrayUnique5(array){
var obj={},type
return array.reduce(function (preValue,curValue){
type = typeof curValue
if(!obj[curValue]){
obj[curValue] = [type]
preValue.push(curValue)
}else if(obj[curValue].indexOf(type)<0){
obj[curValue].push(type)
preValue.push(curValue)
}
retuen preValue
},[])
}
6、ES6的Set数据结构
function arrayUnique6(array){
return Array.from(new Set(array))
}
7、ES6的map数据结构 map+filter()
function arrayUnique7(array){
var map=new Map()
return array.filter((item)=>!map.has(item)&&map.set(item,1))
}