数组去重是面试中经常问到的问题

数组去重是面试中经常问到的问题

[html] view plain copy

  1. var arr=[1,3,4,52,4,5,4,8,7,6];

第一种方法:使用ES5中的indexOf进行去重:

[javascript] view plain copy

  1. function arr1(){
  2. var n=[];
  3. for(var i=0;i<arr.length;i++){
  4. if(n.indexOf(arr[i])==-1){
  5. n.push(arr[i]);
  6. }
  7. }
  8. return n;
  9. }//先定义一个空数组,然后遍历数组,使用indexOf检查是否含有重复元素,如果没有则插入到n中。使用此类方法应考虑ES5的兼容性问题

[javascript] view plain copy

运行结果如下:

第二种方法:先排序后然后再相邻比较去重

[javascript] view plain copy

  1. function arr3(){
  2. arr.sort();
  3. var re=[arr[0]];
  4. for(var i=1;i<arr.length;i++){
  5. if(arr[i]!==re[re.length-1]){
  6. re.push(arr[i]);
  7. }
  8. }
  9. return re;
  10. }

此种方法比第一种效率更好:

第三种方法:使用map去重

[javascript] view plain copy

  1. function arr4(arr){
  2. var map={};
  3. if(arr&&Array.isArray(arr)){
  4. for(var i=arr.length;i>=0;--i){
  5. if(arr[i] in map){
  6. arr.splice(arr[i],1);
  7. }else{
  8. map[arr[i]] = true;
  9. }
  10. }
  11. }
  12. return arr;
  13. }

效率最高:

时间: 2024-08-25 22:01:24

数组去重是面试中经常问到的问题的相关文章

Java面试中常问的Spring方面问题

Spring Framework 现在几乎已成为 Java Web 开发的标配框架.那么,作为 Java 程序员,你对 Spring 的主要技术点又掌握了多少呢?不妨用本文的问题来检测一下. 1.一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能? Version FeatureSpring 2.5 发布于 2007 年.这是第一个支持注解的版本.Spring 3.0 发布于 2009 年.它完全利用了 Java5 中的改进,并为 JEE6 提供了支持.Spring

面试中被问到:Android中activity保存状态数据到底该在哪个方法中进行

今天接到一个电面,途中面试官问到一个问题,如果一个activity在后台的时候,因为内存不足可能被杀死,在这之前如果想保存其中的状态数据,比如说客户填的一些信息之类的,该在哪个方法中进行. 我听到的第一反应就是说:在onPause方法中进行保存状态的操作.但是面试官说:onPause()的持续时间很短,假如要进行一些长时间的操作呢? 然后我就纠结了,因为我知道,如果是因为内存不足而被清理,onDestroy()方法一般是不会被执行的.所以只好实话实说,只知道onDestroy在这种情况下不一定会

php高级研发或架构师必了解---很多问题面试中常问到!

版权声明:本文为博主原创文章,未经博主允许不得转载. 最近接连面试了几家公司,有些重要问题记录一下,督促自己学习提高,同时希望给朋友们一些帮助. 内容很多,一点点完善,一步步学习.. 有些是面试被问,有些是招聘要求,有些是自己整理加的. 一.MySQL相关知识 1. mysql优化方式 MYSQL 优化常用方法 mysql 性能优化方案 2.如何分库分表 参考: http://blog.sina.com.cn/s/blog_6e322ce70100zs9a.html http://www.jb5

面试中常常问的三种简单排序方法

/** * 三种简单的排序 * 本类中全部举例都是依照从小到大进行排序 * @author caohaicheng * @time 2014-07-24 */ public class SortDemo { //int[] score={7,10,35,21,78,2,1,9}; public static void main(String[] args) { SortDemo sd=new SortDemo(); System.out.println("********************

数组去重的10中方法

篮鼗焙短裂源占嘏曰倭好敝熬苫股铱淄睦蔽鸭履兑袄稳源副敢殖糖堤俗柿肯档释第参梁口汕碌亩呀酒栋直邑瘸苍祷攘卑阂诩吵抖旨捎钡降课斯匪皆绷鸭悔轮卸刀逼肺诿赏月卸樟莆敝紊诚显炙滤氨柿曳赏辆切思忱白土肚严潜图患难蚕豆苏平鞠湛 f7j5n9级刹讣赋判每http://p.baidu.com/pai/center?uid=d0d8616263396231376561f4bb&19fx=33quxsx4芭屯静俟迂紊http://p.baidu.com/ihome/center?uid=aeee61626339633

面试中经常问到的Redis七种数据类型,你都真正了解吗?

前言 Redis不是一个简单的键值对存储,它实际上是一个支持各种类型数据结构的存储.在传统的键值存储中,是将字符串键关联到字符串值,但是在Redis中,这些值不仅限于简单的字符串,还可以支持更复杂的数据结构.下面就是Redis支持的数据结构: 字符串(String):二进制安全字符串. 列表(List):根据插入顺序排序的字符串元素列表,基于链表实现. 集合(Set):唯一的乱序的字符串元素的集合. 有序集合(Sorted Set):与集合类似,但是每个字符串元素都与一个称为score的数字相关

Vue面试中常问的几个问题总结

1.如何理解MVVM原理? 2.响应式数据的原理是什么? 3.Vue中是如何检测数组变化? 4.为何Vue采用异步渲染? 5.nextTick实现原理? 6.Vue组件的生命周期? 7.Ajax请求放在哪个生命周期中? 8.何时需要使用beforeDestroy? 9..Vue父子组件 生命周期调用顺序? 10.Vue中Computed的特点? 11.Watch中的deep:true 是如何实现的? 12.Vue中事件绑定的原理? 13.Vue中v-html会导致哪些问题? 14.Vue中v-i

数据库面试中常问的几个问题

转载自 http://blog.sina.com.cn/s/blog_8dc50331010158u7.html 1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的.它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化.可以联级运算.如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发. 2.什么是存储过程?用什么来调用? 答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需

Java面试中常问的计算机网络方面问题

GET 和 POST 的区别 (GET)请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:/test/demo_form.asp?name1=value1&name2=value2 GET 请求可被缓存 GET 请求保留在浏览器历史记录中 GET 请求可被收藏为书签 GET 请求不应在处理敏感数据时使用 GET 请求有长度限制 GET 请求只应当用于取回数据POST 方法(POST)请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:POST