方法1、创建一个新的临时数组来保存数组中已有的元素
方法2、使用哈希表存储已有元素
方法3、使用indexof判断数组元素第一次出现的位置是否为当前位置
方法4、先排序再去重
第一种方法和第三种方法都使用了indexof(),这个函数的执行机制也会遍历数组
第二种使用了哈希表,是最快的
第三种也有一个排序的复杂度的计算
 
详细代码如下:
  1 <!-- js实现数组去重
  2     方法1、创建一个新的临时数组来保存数组中已有的元素
  3     -->
  4     <!-- js实现数组去重
  5     方法2、使用哈希表存储已有元素
  6     -->
  7     <!-- js实现数组去重
  8     方法3、使用indexof判断数组元素第一次出现的位置是否为当前位置
  9     -->
 10     <!-- js实现数组去重
 11     方法4、先排序再去重
 12     -->
 13     <!-- 随机生成100万个0-1000的数组结果
 14         方法一执行时间:240
 15         方法二执行时间:5
 16         方法三执行时间:477
 17         方法四执行时间:246
 18         第三种方法总是第二种方法的将近两倍,而第四种方法与数组的范围有关
 19
 20         如果是-100的数组
 21         方法一执行时间:40
 22         方法二执行时间:4
 23         方法三执行时间:64
 24         方法四执行时间:176
 25
 26         而如果是0-10000
 27         方法一执行时间:2199
 28         方法二执行时间:6
 29         方法三执行时间:4876
 30         方法四执行时间:298
 31         第二种方法是最好的,,,但是是以空间换时间
 32     -->
 33
 34     <script>
 35         var a = [];
 36         for (var i = 0; i < 1000000; i++) {
 37             a.push(Math.ceil(Math.random() * 10000));
 38         }
 39         Array.prototype.unique1 = function() {
 40             var n = []; //临时数组
 41             for (var i = 0; i < this.length; i++) {
 42                 //如果当前数组的第i已经保存进了临时数组,那么跳过
 43                 if (n.indexOf(this[i]) == -1) {
 44                     n.push(this[i]);
 45                 }
 46             }
 47             return n;
 48         }
 49         Array.prototype.unique2 = function() {
 50             var hash = [],
 51                 n = []; //hash哈希表,n临时数组
 52             for (var i = 0; i < this.length; i++) {
 53
 54                 if (!hash[this[i]]) { //如果hash表中没有当前项
 55                     hash[this[i]] = true; //存入哈希表
 56                     n.push(this[i]); //当前元素push到临时数组
 57                 }
 58             }
 59             return n;
 60         }
 61         Array.prototype.unique3 = function() {
 62             var n = [this[0]];
 63             for (var i = 1; i < this.length; i++) {
 64                 //如果当前数组元素在数组中出现的第一次的位置不是i
 65                 //说明是重复元素
 66                 if (this.indexOf(this[i]) == i) {
 67                     n.push(this[i]);
 68                 }
 69             }
 70             return n;
 71         }
 72         Array.prototype.unique4 = function() {
 73             this.sort(function(a, b) {
 74                 return a - b;
 75             });
 76             var n = [this[0]];
 77             for (var i = 1; i < this.length; i++) {
 78                 if (this[i] != this[i - 1]) {
 79                     n.push(this[i]);
 80                 }
 81             }
 82             return n;
 83         }
 84         var begin1 = new Date();
 85         a.unique1();
 86         var end1 = new Date();
 87         console.log('方法1的执行时间:' + (end1 - begin1));
 88         var begin2 = new Date();
 89         a.unique2();
 90         var end2 = new Date();
 91         console.log('方法2的执行时间:' + (end2 - begin2));
 92         var begin3 = new Date();
 93         a.unique3();
 94         var end3 = new Date();
 95         console.log('方法3的执行时间:' + (end3 - begin3));
 96         var begin4 = new Date();
 97         a.unique4();
 98         var end4 = new Date();
 99         console.log('方法4的执行时间:' + (end4 - begin4));
100     </script>

四种方法执行时间如下:
就分享到这些,下次继续···

分享一下我的微信公众号,分享摄影与编程,谢谢大家的关注

转载于:https://www.cnblogs.com/huihappy/p/10800727.html

Js面试题(一)--js实现数组去重怎么实现?相关推荐

  1. 著名面试题: 如何实现数组去重? 假设有数组 array = [1,5,2,3,4,2,3,1,3,4] 你要写一个函数 unique,使得 unique(array) 的值为 [1,5,2,3,4]

    著名面试题: 如何实现数组去重? 假设有数组 array = [1,5,2,3,4,2,3,1,3,4] 你要写一个函数 unique,使得 unique(array) 的值为 [1,5,2,3,4] ...

  2. JS的表单序列化,数组去重,判断数组是否重复等方法

    一.背景 本篇主要是记录一下JS中常用的工具方法.包括表单序列化,判断数组是否重复,数组去重等.做个笔记 二.工具方法 1.表单元素序列化为对象 public function serializeOb ...

  3. JS对以对象组成的数组去重

    这是从https://segmentfault.com/q/1010000006954351参考的,达到了我要去重的功能!!! var hash = {};//arr是要去重的对象数组 arr = a ...

  4. java 数组去重_java面试题:数组去重

    面试中遇到一道笔试题,写一个数组去重的方法. 方法一 我们可以创建一个空的List,遍历数组,依次将数组中的值传入List,利用List的 contains()方法,如果List已经包含当前遍历到的数 ...

  5. Js中数组去重的几种方法

    前几天在看前端面试题的时候,其中js部分有个问题是实现数组去重的算法,一开始就想了一两种方法,后来仔细回忆了下这个题,觉得该问题实现方法确实不止局限于一两种方法 ,从不同的角度去看待该问题就会有多种实 ...

  6. 原生JS数组去重的几种方法

    有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢? 这能怎么办,自己手动实现嘛.(以下代码直接在原型上添加的的方法,为的就是和原 ...

  7. js判断数组中重复元素并找出_面试中常遇见的数组去重

    导读 JS数组去重是面试中并不少见的问题,听起来很简单,当你兴高采烈地回答了你的方法之后,你以为这道题就结束了吗?No,一般来说,面试官会继续问你"除了你刚刚说的方法,还有其他更好的方法吗? ...

  8. js数组去重(多种方法)

    1 // js数组去重 2 Array.prototype.fun1 = function(){ 3 var arr = this, 4 result = [], 5 i, 6 len = arr.l ...

  9. JS数组去重的6种算法实现

    1.遍历数组法 最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法"indexOf"是ECMAScript5 方法 ...

最新文章

  1. QueryList的使用
  2. 从printf谈可变参数函数的实现
  3. cache数据库和mysql_并发环境下,先操作数据库还是先操作缓存?
  4. python3.8.5-Python 3.8.5下载
  5. 开关电源磁性元件设计
  6. (Arxiv-2021)掩码自编码器是可扩展的视觉学习者
  7. 线性回归-误差项分析
  8. git bisect_Git Bisect如何使调试更容易
  9. js:nodejs通过async异步提交事务数据
  10. 视频批量添加滚动字幕,我1分钟就搞定了
  11. Adobe2023全家桶win及Mac系统安装包下载及安装教程ps、pr、ai、ae安装包下载
  12. 深度学习之目标检测学习笔记——1、基本概念
  13. Https、Wss加密实践
  14. android native层进程通信
  15. pc端ui图片尺寸_PC端UI界面设计规范分享 共同来学习_ui设计
  16. 尚好房 02_用户角色管理
  17. 腾讯CSIG测开一面
  18. 汕头正宗的牛肉丸多少钱一斤的
  19. php 判断是几进制,PHP取二进制文件头快速判断文件类型
  20. DreamMail 如何使用yahoo和Gmail邮箱

热门文章

  1. HDOJ 1060 Leftmost Digit
  2. python学习笔记——Thread常用方法
  3. 关于maya与max互导FBX出现错误的解决方案。
  4. javascript取得鼠标的位置
  5. python读取csv文件第一行_尝试读取CSV文件的第一行返回['/']
  6. java为什么序列化不一致_java – 为什么Jackson多态序列化在列表中不起作用?
  7. const与define相比优点_const与#define的区别、优点
  8. java property异常_Java常见的异常和解决的办法
  9. java命名course为名的class_Java教程之变量命名
  10. linux双物理机weblogic集群,linux下weblogic多机器集群部署要点