数组去重的方法

71 阅读1分钟

第一类 利用循环,indexOf include等查看

这一类方法都差不多,利用forEach遍历 然后查看里面是否有对应的item,没有的话就加入到新建立的数组里

1.双重for循环剔除

     // 1. 先建立一个数组 
     let arr = [1,2,3,1,2,3]
     // 2.创建去重方法
     function unqArr(arr){
          for(let i=0; i<arr.length;i++){
              for(let j=i+1;j<arr.length;j++){
                  // 3.这个就是进行两两相比 如果相等就剔除
                  if(arr[i] === arr[j]){
                      arr.splice(y,1);
                      y--
                  }
              }
          }
          return arr
     }

2. 简单的forEach + indexOf / includes

这方法都差不多 也可以用filter过滤,不过都类似,主要就是先遍历,然后查看数组里面有没有这个值,没有就push上去

  let arr = [1,2,3,1,2,3];
  function unqArr(arr){
      // 1. 创建接收的空数组
      let arr2 = [];
      // 2. 开始遍历
      
      /* 这个是 indexOf
       arr.forEach(item ={
          if(arr2.indexOf(item) === -1){
              arr2.push(item)
          }
      })
      */
      // 这个就是includes 本质和indexOf没区别
      arr.forEach(item=>{
          if(!arr2.includes(item)){
              arr2.psuh(item)
          }
      })
     
      return arr2
  }

第二类 利用obj的key map set的唯一性

1. set 这个一行就搞定了

console.log([...new Set(arr)])

2.map 和 obj

mapobj 本质都一样,写起来方法也已类似,就一起写了

    let arr = [1,2,3,1,2,3]
    function unqArr(arr){
    
    /*
      // map要建立map对象 然后利用 has 查看 set加入退出条件
        let map = new Map()
        let arr2 = []
        arr.forEach(item =>{
            if(!map.has(item)){
                map.set(item,true)
                arr2.push(item)
            }
        })
    */
    
    // obj 方法 这里面的循环可以用for  也可以用forEach 
    let obj={}
    let arr2=[]
    arr.forEach(item =>{
    // 本质跟map一样 
        if(!obj[item]){
           arr2.push(item);
           obj[item] = true;
        }
    })
    
    /*
        当然可以用for循环遍历 跟上面一样的
        for(let i=0;i<arr.length;i++){
            if(!obj[arr[i]]){
                arr2.push(arr[i]);
                obj[arr[i]] = true
            }
        }
    */
      
        return arr2
    }