首页 > 其他分享 >JS数组去重的10种方法

JS数组去重的10种方法

时间:2024-03-07 19:22:22浏览次数:26  
标签:function 10 arr return index JS 数组 var array

var arr=[1,1,'true','true',true,true,15,15,false,false,undefined,undefined,null,null,NaN,NaN,'NaN',0,0,'a','a',{},{}]
  1. 利用 Set(ES6中最常用)
    function useSet(arr){
      return Array.from(new Set(arr))
    }

     

  2. 利用 for 嵌套 for,然后 splice(ES5中最常用)
    function useSplice(arr){
      for(var i=0;i<arr.length;i++){
             for(var j=i+1;j<arr.length;j++){
                if(arr[i]==arr[j]){
                   arr.splice(j,1);
                   j--;
                }
            }  
        }  
    }                

     

  3. 利用 indexOf
    function useIndexof(arr){var array=[];
      for(var i=0;i<arr.length;i++){
          if(array.indexOf(arr[i])===-1){
               array.push(arr[i])  
            }
        }
          return array;
    }        

     

  4. 利用 sort
    function useSort(arr){
      arr=arr.sort()
      var array=[arr[0]]
      for(var i=1;i<arr.length;i++){
        if(arr[i]!==arr[i-1]){
          arr.push(arr[i]); 
       }
      }  
      return array;
    }    

     

  5. 利用 includes
    function useIncludes(arr){
      var array=[];
      for(var i=0;i<arr.length;i++){
          if(!array.includes(arr[i])){
             array.push(arr[i]); 
          }       
        }    
       return array;
    }

     

  6. 利用 hasOwnProperty
    function useHasOwnProperty(arr){
      var obj={};
      return arr.filter(function(item,index,arr){
        return obj.hasOwnProperty(typeof item+item)?false:(obj[typeof item+item]=true)
      })
    }

     

  7. 利用 filter
    function useFilter(arr){
        return arr.filter(function(item,index,arr){
          return arr.indexOf(item,0)===index;     
        });
    }

     

  8. 利用递归
    function useDigui(arr){
      var array=aa;
      var len=array.length;
      array.sort(function(a,b){
        return a-b;
      })
      function loop(index){
          if(index>=1){
            if(array[index]===array[index-1]){
              array.splice(index,1);
            }
            loop(index-1);
          }
      }
      loop(len-1);
      return array;
    }
      

     

  9. 利用 Map 数据结构
    function useMap(arr){
      let map=new Map();
      let array=new Array();
      for(let i=0;i<arr.length;i++){
        if(map.has(arr[i])){
          map.set(arr[i],true);
        }else{
          map.set(arr[i],false);
          array.push(arr[i]);
        }
      }
      return array;
    }

     

  10. 利用 reduce+includes
    function useReduce(arr){
      return arr.reduce((prev,cur)=>prev.includes(cur)?prev:[...prev,cur],[]);  
    }

     

最终输出:[1,"true",true,15,false,undefined,null,NaN,"NaN",0,"a",{},{}]

 

标签:function,10,arr,return,index,JS,数组,var,array
From: https://www.cnblogs.com/yhstsy/p/18059564

相关文章

  • P1525 [NOIP2010 提高组] 关押罪犯
    原题链接题解1:按边权从大到小排序,如果这条边的两个点没确定关系,那么把他们设为敌人这样,就成了一棵棵最大生成树(因为有的罪犯之间没有怨气)由敌人的敌人是朋友可以得出,如果两个点在同一棵树,且距离为偶数,那么代表他们之间互为朋友code1#include<bits/stdc++.h>usingnamespace......
  • 【Win10】完美去除桌面快捷方式图标左下角的小箭头,亲测有效!
    在安装软件过程中,选择创建快捷方式后,桌面上会出现一个如下图一样的左下角带有弯弯小箭头的程序图标,看起来非常不美观。那么我们如何去除这个小箭头呢?接下来给大家介绍一种既快捷又实用的操作方式。而且亲测有效!去除图标的详细操作步骤:第一步:桌面创建文本文档第二步:将下面内......
  • CUDA指针数组Kernel函数
    技术背景在前面的一篇文章中,我们介绍了在C++中使用指针数组的方式实现的一个不规则的二维数组。那么如果我们希望可以在CUDA中也能够使用到这种类似形式的不规则的数组,有没有办法可以直接实现呢?可能过程会稍微有一点麻烦,因为我们需要在Host和Device之间来回的转换,需要使用到很多C......
  • 计讯物联环保数采仪TS910全力打造绿色宜居生态环境
    植树造林自古以来就有调节气候、涵养水源、减轻大气污染的益处。如今,随着科技的迅速发展,我们除了能够以植树造林来改善生活环境,保持生态系统,还能通过物联网、大数据、云计算、边缘计算、人工智能等新一代信息技术集成应用于监测管控区域的空气质量与森林的全周期动态情况,实时监测......
  • Hi1102A和Hi1105模块在远距离无线图传领域的选型浅析
    Hi1102A和Hi1105V500都是属于海思旗下的两款WIFI+BT+GNSS+FM四功能一体(江湖俗称四合一)高性能方案,应该可以推出,这个原本是在手机方案集成使用的,本身海思有视频安防主控HI315X系列平台,如果搭配上自己的无线phy芯片,一体化集成的性能应该就完美,于是有了远距离无线图传模块化集成的......
  • Python中Spark读取parquet文件并获取schema的JSON表示
     步骤:初始化SparkSession。使用spark.read.parquet()读取Parquet文件。调用df.schema.json()获取schema的JSON表示。frompyspark.sqlimportSparkSession#初始化SparkSessionspark=SparkSession.builder.appName("ReadParquetSchema").getOrCreate(......
  • 3121000389
    这个作业属于哪个课程软件工程2024-双学位(广东工业大学)这个作业要求在哪里软件工程第一次作业这个作业的目标建立个人技术博客加入博客园班级学习使用Markdown文本语法撰写博客准备一个GitCode账号、上传代码其他参考文献无目录一、评估当前的自己简历......
  • LeetCodeHot100 1.两数之和 46.字母异位词分组 128.最长连续序列
    1.两数之和https://leetcode.cn/problems/two-sum/description/?envType=study-plan-v2&envId=top-100-likedpublicint[]twoSum(int[]nums,inttarget){HashMap<Integer,Integer>map=newHashMap<>();for(inti=0;i<nums.l......
  • 洛谷题单指南-搜索-P1101 单词方阵
    原题链接:https://www.luogu.com.cn/problem/P1101题意解读:对于方阵中的每一个字符,在8个方向上判断是否和"yizhong"匹配,是一个递归问题。解题思路:用chara[N][N]存储所有字符方阵,用boolb[N][N]标记每个字符是否在任一方向上和yizhong匹配遍历方阵每一字符,如果是'y'则在8个方......
  • day57 动态规划part14 代码随想录算法训练营 53. 最大子数组和
    题目:53.最大子数组和我的感悟:理解难点:递推公式想错了。听课笔记:我的错误的代码:通过截图:代码易错点:老师代码:扩展写法:资料:......