js数组去重的五种方法,我来了

60 阅读1分钟

1 Set

   let rest = [...new Set(arr)] 或
   let rest =  Array.from(new Set(arrr))

2 filter和 Set 或则 filter和Map

  const set = new Set()
  const rest = arr.filter(value => !set.has(value)&&set.add(value))
  或者
  const map = new Map()
  const rest = arr.filter(value => !map.get(value)&&map.set(value, value))

3 reduce+Map 或者 reduce+Set

         const  map = new Map()
         const rest = arr.reduce((preValue, currentValue) => {
            !map.get(currentValue) ? preValue.push(currentValue) && map.set(currentValue, currentValue) :  ''
            return preValue
         }, [])
         
         const  set = new Set)
         const rest = arr.reduce((preValue, currentValue) => {
            !set.has(currentValue) ? preValue.push(currentValue) && set.add(currentValue) :  ''
            return preValue
         }, [])

4 一层循环

      function unique(arr){
        let temp = [], set = new Set() 
        for(let i=0; i<arr.length; i++){
            if(!set.has(arr[i])){
                temp.push(arr[i])
                set.add(arr[i])
            }
        }
        return temp
    }

5 两层循环

function uniqueData(arr) {
    if (!Array.isArray(arr)) {
        return
    }
    for(let i=0; i<arr.length; i++){
        for(let j=i+1; j<arr.length; j++){
            if(arr[i]===arr[j]){  // 第一个等同于第二个,splice方法删除第二个
                arr.splice(j,1)
                j--
            }
        }
    }
    return arr
}