1.使用ES6中的set
function unique(arr){
return Array.from(new Set(arr))
}
var arr=[1111,2222,44444,6666]
unique(arr) //[1111, 2222, 44444, 6666]
2,计数变形
var a=[4,44,2,2,1,1,]
var hash=[]
for(let i=0;i<a.length;i++){
if(a[i]in hash){
//什么都不做
}else{
hash[a[i]]=true
}
}
console.log(Object.keys(hash)) // ["1", "2", "4", "44"]
3.indexof 去重
function unique(arr){
if(!Array.isArray(arr)){
console.log('类型错误')
return
}
var array=[]
for(var i=0;i<arr.length;i++){
if(array.indexOf(arr[i])===-1){
array.push(arr[i])
}
}
return arr
}
var arr=[1111,2222,3333,4444]
unique(arr) //[1111, 2222, 3333, 4444]
4,for嵌套,splice去重,
function unique(arr) {
for(var i=0; i<arr.length; i++) {
for(var j=i+1; j<arr.length; j++) {
if(arr[i] === arr[j]) { //第二个等于第一个时,删除第二个
arr.splice(j,1)
j--
}
}
}
return arr
}
var arr = [1,1,1,1,3,3,3,3,3,6,6,6,6,6,6,0,0,8,8,{},{}]
unique(arr)
//[1, 3, 6, 0, 8, {…}, {…}]
5,sort()排序,排序后遍历相邻元素对比
function unique(arr) {
if(!Array.isArray(arr)){
console.log('type error!')
return
}
arr = arr.sort()
var array = [arr[0]]
for(var i=1; i<arr.length; i++){
if(arr[i] !== arr[i-1]) {
array.push(arr[i])
}
}
return array
}
var arr = [1,1,1,1,3,3,3,3,3,6,6,6,6,6,6,0,0,8,8]
unique(arr)
6,递归
function unique(arr) {
var array = arr
var len = array.length
array.sort(function(a,b){ //排序
return a-b
})
function loop(index) {
if(index >= 1) {
if(array[index] === array[index-1]) { //若相邻两个相等,删除前一个
array.splice(index,1)
}
loop(index -1)
}
}
loop(len -1)
return array
}
var arr = [1,1,1,1,3,3,3,3,3,6,6,6,6,6,6,0,0,8,8]
unique(arr) // [0, 1, 3, 6, 8]