文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277


题目

对下列数组去重:
var arr = ['aa','bb','cc','',1,0,'1',1,'bb',null,undefine,null];
要求考虑兼容性和效率

方法一
function unique(arr){var result = [];for (var i = 0;i<arr.length;i++){//如果当前数组的第i项已经保存进了临时数组,忽略掉//否则的话把当前项push到临时数组里面if(result.indexOf(arr[i]) < 0)  result.push(arr[i]);//indexOf 返回元素在result中的位置,如果没有返回-1;}return result;
}
var arr = ['aa','bb','cc','',1,0,'1',1,'bb',null,undefine,null];
console.log(unique(arr));

总结:两个问题:1.加上indexOf()相当于加载两次循环
2.indexOf()在ie9以下不兼容

方法二
function unique(arr){var result = [];var hash = {};for ( var i=0;i<arr.length;i++){var key = (typeof arr[i]) + arr[i];if(!hash[key]){result.push(arr[i]);hash[key] = true;}}return result;
}
var arr = ['aa','bb','cc','',1,0,'1',1,'bb',null,undefine,null];
console.log(unique(arr));

通过hash表,把已经出现过的元素通过下标的形式存入一个object内。下标的引用比indexOf搜索数组快的多。

方法三
function unique(arr){var n = [this[0]];   //结果数组for(var i =1;i<this.length;i++){   //从第二项开始遍历//如果当前数组的第i项在当前数组中第一次出现的位置不是i//那么表示第i项是重复的,忽略掉。否则存入结果数组if(this.indexOf(this[i]) == i)  n.push(this[i]);}return n;
}
var arr = ['aa','bb','cc','',1,0,'1',1,'bb',null,undefine,null];
console.log(unique(arr));
方法四
function unique(arr){this.sort();var re = [this[0]];for (var i =1;i<this.length;i++){if( this[i]  != re[re,length-1] ){re.push(this[i]);}}
}
var arr = ['aa','bb','cc','',1,0,'1',1,'bb',null,undefine,null];
console.log(unique(arr));

先把数组排序,然后比较相邻的两个值。

方法五
//去重(ES6 Set)
function unique2(array){
return Array.from(new Set(array));
}
var arr = ['aa','bb','cc','',1,0,'1',1,'bb',null,undefine,null];
console.log(unique(arr));

ES6 新方法 form,所以兼容性有问题。

转载于:https://www.cnblogs.com/qjqcs/p/5973918.html

javascript数组查重方法总结相关推荐

  1. Vue字符串查重 、数组查重、不重复的文字高亮显示

    Vue字符串查重 ,不重复的文字高亮显示 先放效果图 问题拆分 1.要改变颜色为单个字符颜色,数据格式需改变. 2.对数组查重,获取重复元素 3.元素对比,找出非重复元素 4.添加对应样式 改变数据格 ...

  2. 计算机类sci查重,SCI科研写作:国自然标书查重方法

    就在今天,国家自然科学基金立项结果公布了,可能大家的心情会非常忐忑,无论中标与否,大家都想去分析:怎么样才能离中标更进一步呢?小编在这里整理一些关于国自然的资料,有备无患,查漏补缺,看看自己的问题出在 ...

  3. Javascript数组的 splice方法介绍

    Javascript数组的 splice 方法介绍 splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容.此方法会改变原数组. 语法格式 array ...

  4. Javascript 数组求和的方法

    1.应用场景 主要用于数组求和. 2.学习/操作 JavaScript 数组求和的方法 var array = [1, 2, 3, 4, 5]; var sum = 0; 1.for循环 for (l ...

  5. Hadoop 图像小文件查重方法

    https://eldadlevy.wordpress.com/2011/02/05/hadoop-binary-files-processing-entroduced-by-image-duplic ...

  6. Javascript数组常见的方法

    分为两种:原型(实例)方法和静态函数 第一类:原型方法: 栈方法(后进先出) push 参数:任意个 作用:将任意数量的参数逐个添加到数组尾部 返回值: 新数组的长度 影响:破坏了原数组 pop 参数 ...

  7. JavaScript数组常用的方法总结

    导读:在实际开发中,前端工程师除了写页面布局及样式还要对后端返回的数据进行处理,返回的数据大多数是json格式,一般都是返回一个对象或者数组,下面对常用的数组的使用方法进行总结,方便在开发中手到擒来! ...

  8. excel三种查重方法

    业务目标: 根据B.C.D列的数据是否完全一样,来判断是否是重复数据 方法A:删除重复项 选中B.C.D列,点击数据菜单栏下的删除重复项,重复项被删除,简单粗暴 优点:简单 缺点:难以确定被删除的是哪 ...

  9. JavaScript数组内置方法-知识

    /*         *  数组中常用的内置方法:基于这些方法可以让我们有效的对数组进行操作         *  console.dir(Array.prototype)  查看数组内置方法     ...

最新文章

  1. Ubuntu 14.04上使用CMake编译MXNet源码操作步骤(Python)
  2. Oracle Parallel模式
  3. 02-Unity深入浅出(二)
  4. .net post xml 数据
  5. 好的重构方法才能摆脱“屎山”
  6. bitsadmin命令(Windows下载文件命令)
  7. 赠书5本包邮:数据思维实践、Cloud Native分布式架构原理与实践
  8. Varnish由于cookie过大返回503
  9. leetcode--Longest Substring Without Repeating Characters
  10. linux librtmp 编译,在linux系统下安装python librtmp包的实现方法
  11. excel游戏_Excel Jawbreak游戏
  12. 常用数据接口汇总,百度、谷歌、头条、微博指数,高校名单,疫情数据...
  13. php 新浪微博模拟登陆,python模拟新浪微博登陆功能(新浪微博爬虫)
  14. 仗剑走天涯,执手闯天下
  15. pycharm背景色和字体设置
  16. c++::举例_举例说明:网络
  17. Ubuntu 安装 uWSGI
  18. 树莓派自定义分辨率适配带鱼屏(2560*1080)
  19. GwcNet:逐组相关的立体匹配网络(CVPR 2019)
  20. EndNote X9插入参考文献的格式

热门文章

  1. 细胞转染的操作步骤及注意事项
  2. springboot不会运行gc_SpringBoot项目深度优化和Jvm调优
  3. SCI论文写作--IEEE的期刊和杂志区分
  4. 计算机视觉与深度学习 | 对恐怖袭击事件记录数据的量化分析(附源代码):博主的机器学习首秀(研究生数学建模二等奖)
  5. 软件测试中的 QM、QA、QC、测试规程、测试用例
  6. DELL R720 服务器 RAID阵列卡配置介绍
  7. java http 状态_Java HTTP连接似乎保持打开状态
  8. java atomiclong 使用_java并发:原子类之AtomicLong
  9. excelvba怎么设置不打开文件自动保存_自从有了这个工具,我的Office操作已经快到慢不下来了!(升级篇)...
  10. TensorFlow 笔记4--使用tensorboard