数组去重

197 阅读1分钟

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]