方案一:利用数组的indexOf(一)

原理

先声明一个空数组,然后循环数组成员,利用了数组的indexOf方法去判断当前成员是否存在新数组内,如果不存在则push进去,最后返回新数组得到一个去重后的数组!

代码如下

Array.prototype.unique = function() {var newArr = [],i = 0,len = this.length;for (; i < len; i++) {var tempArr = this[i];if(newArr.indexOf(tempArr) === -1){newArr.push(tempArr);}}return newArr;
};

方案二:利用数组的indexOf方法(二)

原理

创建一个新数组并插入第一个元素,再对数组进行轮询,判断当前元素在数组中的位置,如果不为 i 则表示在数组中已经存在,则不添加!

代码如下:

Array.prototype.unique = function() {var newArr = [this[0]],i = 1,len = this.length;for (; i < len; i++) {var tempArr = this[i];if(this.indexOf(tempArr) === i){newArr.push(tempArr);}}return newArr;
};

方案三:利用对象的hash值

原理:

创建一个obj对象,用于存放当前值得值,对数组进行轮询,判断当前值在obj对象中的值,如果不存在则添加!该方法利用了对象的hash进行了性能上的提升!相对前面两种该方法性能更高一点!

代码如下:

Array.prototype.unique = function() {var obj = {},newArr = [],i = 0,len = this.length;for (; i < len; i++) {var tempArr = this[i];if (!obj[tempArr]) {obj[tempArr] = true;newArr.push(tempArr);}}return newArr;
};

方案四:利用数组排序进行去重

原理

先对数组进行排序,调用了数组内部的sort方法。然后对数组进行轮询,判断当前元素是不是新数组的最后一项,如果不是则表示是第一次添加,直接push进去,否则跳过。

代码如下:

Array.prototype.unique = function() {this.sort();var newArr = [this[0]],i = 0,len = this.length;for (; i < len; i++) {var tempArr = this[i];if(tempArr !== newArr[newArr.length -1]){newArr.push(tempArr);}}return newArr;
};

方案五:利用正则匹配进行去重

原理

先将数组转换成指定符号分割的字符串,然后进行一系列的替换操作,最后split成新的数组。(注意:原来数组成员类型为int的经过该操作后会变成string类型,慎用!!!!)

代码如下:

Array.prototype.unique = function() {return this.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g, "$1$2$4").replace(/,,+/g, ",").replace(/,$/, "").split(",");
}

方案六:利用Set进行去重

function unique(arr){return Array.from(new Set(arr));
}

转载于:https://www.cnblogs.com/damingge/p/6507597.html

JavaScript 数据去重的常用几种方法相关推荐

  1. 【Arduino串口数据保存到excel中常用三种方法】

    [Arduino串口数据保存到excel中常用三种方法] 1. 前言 2. 利用excel自带Data Streamer读取 2.1 启用 Data Streamer 加载项 2.2 刷写代码并将微控 ...

  2. java mysql防重复提交_防止数据重复提交的6种方法(超简单)!

    有位朋友,某天突然问磊哥:在 Java 中,防止重复提交最简单的方案是什么? 这句话中包含了两个关键信息,第一:防止重复提交:第二:最简单. 于是磊哥问他,是单机环境还是分布式环境? 得到的反馈是单机 ...

  3. [转]asp.net导出数据到Excel的三种方法

    原文出处:asp.net导出数据到Excel的几种方法(1/3) .asp.net导出数据到Excel的几种方法(2/3).asp.net导出数据到Excel的几种方法(3/3) asp.net导出到 ...

  4. getclass方法_防止数据重复提交的6种方法(超简单)!

    有位朋友,某天突然问磊哥:在 Java 中,防止重复提交最简单的方案是什么? 这句话中包含了两个关键信息,第一:防止重复提交:第二:最简单. 于是磊哥问他,是单机环境还是分布式环境? 得到的反馈是单机 ...

  5. JavaScript 实现网页截屏五种方法

    JavaScript 实现网页截屏五种方法 最近研究了下如何利用JavaScript实现网页截屏,包括在浏览器运行的JS,以及在后台运行的nodeJs的方法.主要看了以下几个: PhantomJS P ...

  6. 数据分析常用三种方法

    数据分析常用三种方法:趋势分析.对比分析.细分分析 1. 趋势分析 趋势分析般而言,适用于产品核心指标的长期跟踪,比如,点击率,GMV,活跃用户数等.做出简单的数据趋势图,并不算是趋势分析,趋势分析更 ...

  7. 创建JSONArray的常用四种方法

     创建JSONArray的常用四种方法 1.从头或者从零开始,创建一个JSONArray(Creating a JSONArray from scratch) 实例1: Java代码  JSONA ...

  8. mysql去重查询的三种方法

    文章目录 前言 一.插入测试数据 二.剔除重复数据方法 1.方法一:使用distinct 2.方法二:使用group by 3.方法三:使用开窗函数 总结 前言 数据库生成环境中经常会遇到表中有重复的 ...

  9. 芯片数据的差异分析主要包括三种方法 ANCOVA进行差异分析 为何不用deseq2

    Shared Gene Expression Alterations in Schizophrenia and Bipolar Disorder Expression of cilium-associ ...

最新文章

  1. JZOJ 5643. 【NOI2018模拟4.10】最小代价
  2. Oracle入门(二)之服务启动bat
  3. SCP-bzoj-1019
  4. zabbix监控MHA及自动启动
  5. 重读 CenterNet,一个在Github有5.2K星标的目标检测算法
  6. MySql的架构和历史
  7. MySQL--pt-osc工具学习
  8. 自动控制理论 第一章 思维导图
  9. pdca管理循环基本主张_PDCA管理循环图怎么画?干货分享高颜值图形图表软件
  10. 关于Linux备份文件和应用的几个命令:tar和cp
  11. Ubuntu18.04.4安装与配置,让老机焕发青春
  12. C语言 printf() 函数,总结笔记记录
  13. 采用蒙特卡罗方法生成zipf分布随机数据
  14. jmp指令流程图怎么写_流程图模板
  15. Java数据库中台项目,电商,CMS轻松实现,包含数据库源文件
  16. 最便宜的html手机,便宜手机
  17. 长沙电销机器人排名_厂家大揭秘:电销外呼系统排名
  18. 2021年中国共享单车行业发展现状及市场格局分析:市场规模达320亿元,同比增长29.55%[图]
  19. Laravel引入谷歌验证器
  20. 黑客道德准则 不是所有的黑客都是罪犯

热门文章

  1. iOS开发-NSString去掉所有换行及空格
  2. Visual Studio开发必备:扩展工具应用
  3. Authentication 方案优化探索(JWT, Session, Refresh Token, etc.)
  4. 【JAVA语法】03Java-继承性
  5. php 超长用省略号代替
  6. Mac环境PHP踩过的“坑” (一)函数重载
  7. 负载均衡集群LVS模式之DR模型
  8. AWS — AWS 上的 NFV
  9. Linux 操作系统原理 — 网络 I/O 虚拟化
  10. PyCharm+QT Designer整合