JS中数组去重的七大方法

一. 利用排序 后再对数组是否有重复来去重

let arr = [1,2,2,2,3,33,44,4,44,22]
    console.log(arr.sort((a,b)=>a-b));
    let a = arr.sort((a,b)=>a-b)
    function clearRepeat(arr){
      let result = [arr[0]]
      for (let i =1 ;i<arr.length;i++){
        arr[i] != result[result.length-1] && result.push(arr[i])
      }
      console.log(result);
    }
    console.time("str")
    clearRepeat(arr)
    console.timeEnd("str")

二. ES6 的Set 集合 去重 (高性能) set可以接受一个数组参数并返回一个不重复的对象

function unique(arr){
      // let x = new Set(arr)
      // return [...x]
     return Array.from(new Set(arr))  // 简便写法
    //  return Array.from(new Set([...arr]))
    } 
    console.time("str")
    console.log(unique(arr));
    console.timeEnd("str")

三.filter 数组过滤函数 并对其重排序 (简洁)

let b =arr.filter((item,index)=>{
      return arr.indexOf(item) == index
    }).sort((a,b)=>a-b)
    console.time("str")
    console.log(b);
    console.timeEnd("str") 

四 . 哈希思想(高性能)

主要思路创建一个对象存储记录该数据的一个状态

function unique(arr){
      let result =[]
      let hash = {}
      for(let i of arr){
        if(!hash[i]){
          result.push(i)
          hash[i] = true
        }
      }
      return result.sort((a,b)=>a-b)
    }
    console.time("str")
    console.log(unique(arr));
    console.timeEnd("str")

五. 利用indexOf 方法 有重复时会返回第一个数的下标 没找到时返回-1

function unique1(arr){
      let result = []
      for(let i=0;i<arr.length;i++){
        if(result.indexOf(arr[i]) == -1){
          result.push(arr[i])
        }
      }
      return result
    }

六.利用includes 方法 当result 数组中没有值时添加进去

function unique2(arr){
      let result =[]
      for(let i of arr){
        !result.includes(i)  && result.push(i)
      }
      return result
    }

七 找到重复的数组

找出数组中重复的数字。


在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

// 哈希算法
var findRepeatNumber = function(nums) {
    let hash = {}
    for(let i of nums){
        if(!hash[i]){
            hash[i] = true
        }else{
          return i
        }
    }
};
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值