当前位置: 首页 > 编程日记 > 正文

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

方法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

相关文章:

使用Maven 打包项目 生成XXX.tar.gz 文件

1、在项目中创建assembly文件夹 创建如图的一个assembly.xml文件 内容如下 <assemblyxmlns"http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"h…

整理了一下SQL Server里面可能经常会用到的日期格式转换方法

select getdate() 2004-09-12 11:06:08.177 举例如下: select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),-,), ,),:,) 20040912110608 select CONVERT(varchar(12) , getdate(), 111 ) 2004/…

java使用Cookie判断用户登录情况

1.判断是否登录 public boolean isLogin() {Set<Cookie> cookies this.browser.getCookies();String JSESSIONIDID "JSESSIONID";String sessionIdID "sessionId";String loginID "login";String JSESSIONIDIDValue "";Str…

桌面菜单背景修改

只能修改资源管理器里的右键菜单&#xff0c;即桌面、文件夹和各种文件上的右键菜单&#xff0c;其它如标题栏和任务栏的是没效果的&#xff0c;可惜了。修改其实只是注册了一个dll文件&#xff0c;然后修改这个dll里面的背景图片就可以了。1.首先下载ContextBG.dll。2.然后下载…

全浏览器兼容的DIV拖动效果

测试过下列浏览器 IE6、IE7、IE8、Chrome 5、FF 3.6、Opera 10、Safari 5 拖动效果的脚本网上都有&#xff0c;但网上找到的脚本有个问题 这是在网上随便找的代码(原出处不知道&#xff0c;很多类似代码的文章都没写出处&#xff0c;实在不知道到底出至哪里...) 代码 1 <!DO…

SpringSecurity使用 配置文件 和wen.xml 文件配置

目录 1、web.xml 文件配置 2、spring-security 普通 为使用自己创建的认证类 1、web.xml 文件配置 !-- 配置SpringSecurity的拦截器 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/spring-se…

Echo团队Alpha冲刺随笔 - 第九天

项目冲刺情况 进展 已经进入测试阶段&#xff0c;正在消除系统的bug问题 通过测试&#xff0c;找出了系统中存在的较多bug......体会 测试太重要了&#xff0c;很多原本以为没什么bug&#xff0c;一测就能找到好几个&#xff0c;而且改个bug真的可能新加n多个今日会议内容 黄少…

Windows下配置scrapy需要MVC的14.0版本(转载)

转载于--http://blog.csdn.net/MrWilliamVs/article/details/77130965 杨煜冬煜杨的博客&#xff0c;他的博客比较杂&#xff0c;Java、Python都有--http://blog.csdn.net/yyd19921214 环境依赖于 microsoft visual C 14.0, 仔细看报错后面还写着该C库的下载地址&#xff1b;(但…

关于SQLServer2005的学习笔记——约束、Check、触发器的执行顺序

通常我们认为一条 Insert 就是一个事务&#xff0c;但这个事务是如何执行的呢&#xff1f;如果保障事务执行时该事务的完整性和一致性呢&#xff1f;抛开存储机制、索引、锁等环节&#xff0c;让我们看看约束、 Check 和触发器在这个过程中的先后顺序&#xff0c;或许能加深些对…

Kubernetes集群部署(yum部署)

环境准备 Kubernetes-Master:192.168.37.134 #yum install kubernetes-master etcd flannel -y Kubernetes-node1:192.168.37.135 #yum install kubernetes-node etcd docker flannel *rhsm* -y Kubernetes-node2:192.168.37.146 #yum install kubernetes-node etcd…

完成个人中心—导航标签

个人中心—视图函数带标签页面参数tagapp.route(/usercenter/<user_id>/<tag>)def usercenter(user_id, tag): if tag ‘1: return render_template(usercenter1.html, **context)个人中心—导航标签链接增加tag参数<li role“presentation”><a…

PowerShell 2.0 实践(十二)管理 SQL Server 2008 R2(1)

DBA可以使用的工具很多&#xff0c;对于SQL Server来说&#xff0c;有查询分析器、事件探查器、命令行工具等&#xff0c;其中SQL语句是重中之重&#xff0c;但是PowerShell的出现使得DBA又多了一种选择。 测试脚本下载 本系列所有测试脚本均在Windows Server 2008 R2 DataCent…

Vue.js 学习路线

目录 1、Vue环境搭建 2、绑定数据 绑定对象 循环数组渲染数据 3、Vue 及双向数据绑定 Vue事件介绍 以及Vue中的ref获取dom节点 4、Vue事件 定义方法 执行方法 获取数据 改变数据 执行方法传值 以及事件对象 5、 Vue中创建单文件组件 注册组件 以及组件的使用 6、Vue中组…

企业信息化所面临的问题

企业信息化建设企业信息化所面临的问题 wxwinter 摘要 企业信息化所面临的问题以及对解决这问题的探讨目录 1 企业信息化建设走到今天所面临的问题 1 1.1 一、没有意识到信息化与工业化是一个不可分割的整体 1 1.2 二、系统零散,产生了信息孤岛 1 1.3 三…

windows 10 下部署WCF 一些细节

总体上在IIS中部署一个WCF服务和Win7没有什么区别 但是&#xff0c;如果你使用的是.NET 4.5开发的 WCF服务&#xff0c;而windows10 又安装了.net 4.7 那么你需要注意下面问题 转载于:https://www.cnblogs.com/songr/p/10806615.html

30岁前挣够500万

教你30岁前挣够500万&#xff01;&#xff08;不妨看完&#xff0c;心态会改变。&#xff09; 成功源于自信&#xff01;相信自己。下边每个字都是价值不菲&#xff0c;你认真看了吗&#xff1f;一艘没有航行目标的船&#xff0c;任何方向的风都是逆风1、你为什么是穷人&#x…

查看微码的两种方式hmcaix

转载于:https://www.cnblogs.com/jonathanyue/p/9301212.html

根据传入坐标和图片URL地址对图片进行切图操作、将图片转化成Base64位码

目录 1、根据传入坐标和图片URL地址对图片进行切图操作 2、将图片转化成Base64位编码、根据传入坐标 算出切点坐标 在开发过程的学习记录&#xff0c;此两个工具类主要是对图像的处理&#xff08;切图&#xff09;&#xff0c;对文件的想换转化&#xff0c;将文件转化成字节数…

SQL语句 goto

代码 /*********************求1234......................100的和*******************************/declaresumsmallint,ismallintseti1setsum0label: if(i<100) beginsetsumsumisetii1gotolabel endprintsum 都说不要用goto,可我看了一些经典sql 代码,…

zookeeper 和 dubbo 配置

转载于:https://www.cnblogs.com/tian1993/p/10807996.html

学习总结--团队项目

《一》团队项目 小组成员思维活跃&#xff0c;仅仅在一节课的时间里提出了n个颠覆软件开发界的思维的idea&#xff0c;最后在层层pk最后留下了八个惊世骇俗的想法。其中包括了要重振中国游戏界&#xff0c;打破王者农药的垄断地位要重写的贪吃蛇小游戏和2D游戏&#xff1b;还有…

markdown自动生成侧边栏TOC /目录

markdown自动生成侧边栏TOC /目录 模板地址 &#xff1a; https://github.com/huyande/MarkdownTemplate.git

[英文面試]如何寫面試後的感謝信

Dear Mr. X:尊敬的X先生&#xff1a; Thank you very much for the interview yesterday. I learned a great deal about your company, its major projects, and its ambitious plans for future development in Guangzhou. 非常感謝您昨天的面試。我了解到許多有關貴公司的情…

【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

震惊&#xff01;世上最接地气的字符串浅谈(HASHKMP) 笔者过于垃圾&#xff0c;肯定会有些错的地方&#xff0c;欢迎各位巨佬指正&#xff0c;感激不尽&#xff01; 引用&#xff1a;LYD的蓝书&#xff0c;一本通&#xff0c;DFC的讲稿&#xff0c;网上各路巨佬 Luguo id: 章鱼…

SQL Server2008及以上 表分区操作详解

SQL Server 表分区之水平表分区 转自&#xff1a;https://www.cnblogs.com/Brambling/p/6766482.html什么是表分区&#xff1f; 表分区分为水平表分区和垂直表分区&#xff0c;水平表分区就是将一个具有大量数据的表&#xff0c;进行拆分为具有相同表结构的若干个表&#xff1b…

浅谈New关键字

new关键字在我们的程序中可谓是无时不刻在用到&#xff0c;那么new关键字都可以用在哪些地方呢&#xff1f;考虑以下几个问题&#xff1a; 1、new一个class对象和new一个struct或者new一个enum有什么不同&#xff1f; 答&#xff1a;new一个class时&#xff0c;new完成2个内容&…

SpringBoot 框架中 使用Spring Aop 、创建注解、创建枚举类 使用过程记录

1、开始 在Springboot框架中引入AOP <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency> 2、创建注解 因需要在方法层面上进行控制 所以使用注解 import java.…

Linux下屏蔽Ctrl+Alt+Delete

1、Redhat 5.X/CentOS5.X--------------------------------------使用Root账户登陆系统&#xff0c;修改/etc/inittab# Trap CTRL-ALT-DELETEca::ctrlaltdel:/sbin/shutdown -t3 -r now这句前面加“#”注销掉 就可以了&#xff01;--------------------------------------2、Fe…

Python网络爬虫--urllib

本篇随便记录学习崔庆才老师编著的《Python3 网络爬虫开发实战》以及urllib标准库使用 urllib库是Python内置的HTTP请求库&#xff0c;包含四个模块&#xff1a; request&#xff1a;最基本的HTTP请求模块&#xff0c;可以用来模拟发送请求。error&#xff1a;异常处理模块&…

Python基础三--字典,集合,编码,深浅copy,元祖、文件操作

字典 dict数据类型划分&#xff1a;可变数据类型&#xff0c;不可变数据类型不可变数据类型&#xff1a; 元组&#xff0c;bool值&#xff0c;int&#xff0c;str 可哈希可变数据类型&#xff1a; list&#xff0c;dict&#xff0c;set 不可哈希dict key…