• js数组去重


    数组去重是一个比较古老的话题,当然也是很经典的一个js不朽话题,今天项目又用到了数组去重,我们就老生常谈一下此话题;

    方法1: 利用indexof判断新数组中是否包含老数组中的元素,没有就push

     1 var arr=[1,2,33,1,2,333,'苹果','香蕉','苹果',22];
     2         //利用indexOf
     3         function unique(arr){
     4             var newArr=[];
     5             for(var i=0;l=arr.length,i<l;i++){
     6                 if(newArr.indexOf(arr[i])==-1){
     7                     newArr.push(arr[i]);
     8                 }
     9             }
    10             return newArr;
    11         }
    12         console.log(unique(arr));
    13         //[1, 2, 22, 33, 333, "苹果", "香蕉"]

    方法2:利用下标,通过indexof判断,如果第i项第一次出现的索引是i,那么就添加到新数组,否则就在新数组中存在,不添加

     1 var arr=[1,2,33,1,2,333,'苹果','香蕉','苹果',22];
     2         //利用下标加indexOf
     3         function unique1(arr){
     4             var newArr=[arr[0]];
     5             for(var i=1;l=arr.length,i<l;i++){
     6                 if(arr.indexOf(arr[i])==i){
     7                     newArr.push(arr[i])
     8                 }
     9             }
    10             return newArr;
    11         }
    12         console.log(unique1(arr));
    13         //[1, 2, 22, 33, 333, "苹果", "香蕉"]

     方法3:据说是最快去重方法,构建一个对象,利用key value来去重

     1 var arr=[1,2,33,1,2,333,'苹果','香蕉','苹果',22];
     2         //对象键值去重
     3         function unique2(arr){
     4             var newObj={},newArr=[],type,val;
     5             for(var i=0;l=arr.length,i<l;i++){
     6                 val=arr[i];
     7                 type=typeof val;
     8                 console.log(type);
     9                 if(!newObj[val]){
    10                     newObj[val]=[type];
    11                     newArr.push(val);
    12                 }else if(newObj[val].indexOf(type)<0){
    13                     newObj[val].push(type);
    14                     newArr.push(val);
    15                 }
    16             }
    17             return newArr;
    18         }
    19         console.log(unique2(arr));
    20        //[1, 2, 22, 33, 333, "苹果", "香蕉"]

    方法4:双重遍历去重

     1 //双重遍历去重
     2         var arr=[1,2,33,1,2,333,'苹果','香蕉','苹果',22];
     3         function unique3(arr){
     4             var newArr=[];
     5             for(var i=0;l=arr.length,i<l;i++){
     6                 for(var j=i+1;j<l;j++){
     7                     if(arr[i]===arr[j]){
     8                         j= ++i;        
     9                     }
    10                 }
    11                 newArr.push(arr[i]);
    12             }
    13             return newArr;
    14         }
    15         console.log(unique3(arr));
    16         //[1, 2, 22, 33, 333, "苹果", "香蕉"]

    方法5:如果你使用了jQuery那么恭喜你 ,去重很简单,因为jQuery有为此准备api,但是切记先把jQuery引入

    1 var arr=[1,2,33,1,2,333,'苹果','香蕉','苹果',22];
    2         //jquery unique方法
    3         console.log($.unique(arr));
    4       //[1, 2, 22, 33, 333, "苹果", "香蕉"]

    好了,目前就这些,有其他好的办法大家也可以评论告诉我下,等有了新方法在给大家更。。。

     //[1, 2, 22, 33, 333, "苹果", "香蕉"]
  • 相关阅读:
    【BZOJ2227】【ZJOI2011】看电影 [组合数][质因数分解]
    【BZOJ2648】SJY摆棋子 [KD-tree]
    【BZOJ3237】【AHOI2013】连通图 [CDQ分治]
    【BZOJ1901】Dynamic Rankings [整体二分]
    【BZOJ2527】【POI2011】Meteors [整体二分]
    【BZOJ3624】【APIO2008】免费道路 [生成树][贪心]
    【BZOJ2663】灵魂宝石 [二分]
    【BZOJ4653】【NOI2016】区间 [线段树]
    【BZOJ2049】【SDOI2008】洞穴勘测 [LCT]
    【BZOJ4008】【HNOI2015】亚瑟王 [期望DP]
  • 原文地址:https://www.cnblogs.com/fuzitu/p/7366776.html
Copyright © 2020-2023  润新知