Js面试题(一)--js实现数组去重怎么实现?
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实现数组去重怎么实现?相关推荐
- 著名面试题: 如何实现数组去重? 假设有数组 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] ...
- JS的表单序列化,数组去重,判断数组是否重复等方法
一.背景 本篇主要是记录一下JS中常用的工具方法.包括表单序列化,判断数组是否重复,数组去重等.做个笔记 二.工具方法 1.表单元素序列化为对象 public function serializeOb ...
- JS对以对象组成的数组去重
这是从https://segmentfault.com/q/1010000006954351参考的,达到了我要去重的功能!!! var hash = {};//arr是要去重的对象数组 arr = a ...
- java 数组去重_java面试题:数组去重
面试中遇到一道笔试题,写一个数组去重的方法. 方法一 我们可以创建一个空的List,遍历数组,依次将数组中的值传入List,利用List的 contains()方法,如果List已经包含当前遍历到的数 ...
- Js中数组去重的几种方法
前几天在看前端面试题的时候,其中js部分有个问题是实现数组去重的算法,一开始就想了一两种方法,后来仔细回忆了下这个题,觉得该问题实现方法确实不止局限于一两种方法 ,从不同的角度去看待该问题就会有多种实 ...
- 原生JS数组去重的几种方法
有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢? 这能怎么办,自己手动实现嘛.(以下代码直接在原型上添加的的方法,为的就是和原 ...
- js判断数组中重复元素并找出_面试中常遇见的数组去重
导读 JS数组去重是面试中并不少见的问题,听起来很简单,当你兴高采烈地回答了你的方法之后,你以为这道题就结束了吗?No,一般来说,面试官会继续问你"除了你刚刚说的方法,还有其他更好的方法吗? ...
- js数组去重(多种方法)
1 // js数组去重 2 Array.prototype.fun1 = function(){ 3 var arr = this, 4 result = [], 5 i, 6 len = arr.l ...
- JS数组去重的6种算法实现
1.遍历数组法 最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法"indexOf"是ECMAScript5 方法 ...
最新文章
- QueryList的使用
- 从printf谈可变参数函数的实现
- cache数据库和mysql_并发环境下,先操作数据库还是先操作缓存?
- python3.8.5-Python 3.8.5下载
- 开关电源磁性元件设计
- (Arxiv-2021)掩码自编码器是可扩展的视觉学习者
- 线性回归-误差项分析
- git bisect_Git Bisect如何使调试更容易
- js:nodejs通过async异步提交事务数据
- 视频批量添加滚动字幕,我1分钟就搞定了
- Adobe2023全家桶win及Mac系统安装包下载及安装教程ps、pr、ai、ae安装包下载
- 深度学习之目标检测学习笔记——1、基本概念
- Https、Wss加密实践
- android native层进程通信
- pc端ui图片尺寸_PC端UI界面设计规范分享 共同来学习_ui设计
- 尚好房 02_用户角色管理
- 腾讯CSIG测开一面
- 汕头正宗的牛肉丸多少钱一斤的
- php 判断是几进制,PHP取二进制文件头快速判断文件类型
- DreamMail 如何使用yahoo和Gmail邮箱
热门文章
- HDOJ 1060 Leftmost Digit
- python学习笔记——Thread常用方法
- 关于maya与max互导FBX出现错误的解决方案。
- javascript取得鼠标的位置
- python读取csv文件第一行_尝试读取CSV文件的第一行返回['/']
- java为什么序列化不一致_java – 为什么Jackson多态序列化在列表中不起作用?
- const与define相比优点_const与#define的区别、优点
- java property异常_Java常见的异常和解决的办法
- java命名course为名的class_Java教程之变量命名
- linux双物理机weblogic集群,linux下weblogic多机器集群部署要点