数组去重-6种方法

96 阅读1分钟
let arr = [1, 2, 3, 4, 3, 2, 3, 4, 6, 7, 6]

方法1,使用es6方法 [...new Set(arr)]

let unique = (arr) => [...new Set(arr)]
console.log(unique(arr));

方法2 利用indexOf 查找某个指定的元素在数组中首次出现的位置,如果返回值不等于-1,并且返回值不等于下标,则数组通过splice,去除多余的数据(修改原数组)
for (let i = 0; i < arr.length; i++) {
  let index = arr.indexOf(arr[i])
  if(index>-1 && index !== i ) {
    arr.splice(i,1)
    i--
  }
}
console.log(arr);

方法三  利用indexOf, 将去重的数据放在新数组中(不修改原数组)
let result =[]
for (var i = 0; i < arr.length; i++) {
  if(result.indexOf(arr[i]) == -1) {
    result.push(arr[i])
  }
}
console.log(result)

方法四: 双重for循环,然后splice去重

function unique(arr){
  for (let i = 0; i < arr.length; i++) {
    for (let j = i+1; j < arr.length; j++) {
      if(arr[i]== arr[j]) {
        arr.splice(j,1)
        j--
      }
    }
  }
  return arr
}
console.log(unique(arr));

方法五:  利用: filter indexOf
let unique = (arr) => {
  return arr.filter((item,index)=> {
    return arr.indexOf(item) == index
  })
}
console.log(unique(arr));

// 方法六 利用Map数据结构去重
let unique = (arr) => {
  let seen = new Map();
  return arr.filter((item)=> {
    return !seen.has(item) && seen.set(item,1)
  })
} 
console.log(unique(arr));