zoukankan      html  css  js  c++  java
  • 数组去重的12种方法

     方法一:set:不是一种数据类型,始终数据结构;成员唯一

    1 let  arr =[12,1,12,3,1,88,66,66,88,999];
    2 function unique(ary){
    3    let s = new Set(ary);
    4     //Array.from:讲set数据类型结构转成真正的数组;
    5     return Array.from(s)
    6 }
    7 unique(arr);

      方法二:对象属性名不能重复

    let arr = [12,1,1,22,12,1,55,66,99,88,44]
     funciton unqiue(ary){
            let obj ={};
            for(let i = o ; i < ary.length; i++){
                 let cur =ary[i];
                 if(obj[cur]){
                   //ary.splice(i,1)//导致数组塌陷
                   ary[i] = ary[ary.length-1];
                   ary.length--; //删除最后一项
                  i--continue;
              }
              obj[cur]=cur;//给obj新增键值对;属性名和属性值一样
        }            
    }    
     unique(arr);

       方法三:indexOf

     1 let arr = [12,1,12,3,1,88,66,9,66];
     2  function unique(ary) {
     3         let newAry = [];
     4         for(let i=0;i<ary.length;i++){
     5             let  cur = ary[i];
     6             if(newAry.indexOf(cur)===-1){
     7                 newAry.push(cur);
     8             }
     9         }
    10         return newAry;
    11     }
    12     unique(arr)

      方法四: sort

    let arr = [12,1,12,3,1,88,66,9,66];
    function unique(ary) {
           let a = ary.sort(function (a,b) {
               return a-b;
           });
           for(let i=0;i<a.length;i++){
               if(a[i]===a[i+1]){
                   a.splice(i+1,1);
                   i--;
               }
           }
           return a;
       }
       unique(arr)

      方法五:includes:包含;如果数组包含哪一样,返回true;不包含返回false;

     1 let arr = [12,1,12,3,1,88,66,9,66];
     2 function unique(ary) {
     3         let newAry = [];
     4         let len = ary.length;
     5         for(let i=0;i<len;i++){
     6             let cur = ary[i];
     7             if(!newAry.includes(cur)){
     8                 newAry.push(cur);
     9             }
    10         }
    11         return newAry;
    12     }
    13     console.log(unique(arr));

      方法六:hasOwnProperty:检测属性名对象的一个私有属性;返回一个布尔值

     1 let arr = [12,1,12,3,1,88,66,9,66];
     2 function unique(ary) {
     3         let obj = {};
     4         return ary.filter(function (item,index,a) {
     5             // item : 数组每一个成员
     6             // index: 成员对应的索引
     7             // a : 整个数组
     8             // hasOwnProperty来校验的该属性是否出现过;
     9            return  obj.hasOwnProperty(typeof item+item)?false:obj[typeof item+item]=true;
    10            if(obj.hasOwnProperty(typeof item+item)){
    11                return false
    12            }else{
    13                obj[typeof item+item]=true;
    14                return true;
    15            }
    16         })
    17     }
    18     console.log(unique(arr))

      方法七:filter+indexOf

    1 let arr = [12,1,12,3,1,88,66,9,66];
    2     function unique(ary) {
    3         return ary.filter(function (item,index,a) {
    4             return ary.indexOf(item)===index;
    5         })
    6     }
    7     console.log(unique(arr));

      方法八:splice

    let arr = [12,1,12,3,1,88,66,9,66];
     function unique(ary) {
            for(let i=0;i<ary.length;i++){
                for(j=i+1;j<ary.length;j++){
                    if(ary[i]===ary[j]){
                        ary.splice(j,1);
                        j--;
                    }
                }
            }
            return ary;
        }
        unique(arr);

      方法九:递归

     1 let arr = [12,1,12,3,1,88,66,9,66];
     2 function unique(ary) {
     3         let  len= ary.length;
     4         ary = ary.sort(function (a,b) {
     5             return a-b;
     6         });
     7         function loop(index) {
     8             if(index>=1){
     9                 if(ary[index]===ary[index-1]){
    10                     ary.splice(index,1);
    11                 }
    12                 loop(index-1)
    13             }
    14         }
    15         loop(len-1);
    16         return ary;
    17     }
    18     console.log(unique(arr));

      方法十:Map:利用map数据结构存值的特点

    let arr = [12,1,12,3,1,88,66,9,66];
    function unique(ary) {
            let newAry =[];
            let map = new Map();
            for(let i=0;i<ary.length;i++){
                if(!map.has(ary[i])){
                    map.set(ary[i],true);
                    newAry.push(ary[i]);
                }
            }
        }
        unique(arr);

      方法十一:reduce

    let arr = [12,1,12,3,1,88,66,9,66];
    function unique(ary) {
            // reduce : 第一个是函数,第二个参数会传给第一次回调的prev;
            return ary.reduce((prev,next)=>{
                // 该函数返回值是下一次执行的prev;
                return prev.includes(next)?prev:[...prev,next];
            },[])
        }
        console.log(unique(arr));

      方法十二:类似于方法一的set,用了剩余运算符...

    let  arr = [12,1,12,3,1,88,66,9,66];
        let a = [...new Set(arr)];
        console.log(a);
  • 相关阅读:
    Bean生命周期
    Bean的作用域
    神经网络训练中,傻傻分不清Epoch、Batch Size和迭代
    jQuery中选择器有哪几种
    数据库的事务机制
    多线程面试题
    HTTP请求报文和HTTP响应报文
    linux tomcat单机部署多应用
    flexbox预习
    作业
  • 原文地址:https://www.cnblogs.com/ly1368489670/p/12831176.html
Copyright © 2011-2022 走看看