javascript数组查重方法总结
文章参考地址: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,所以兼容性有问题。
javascript数组查重方法总结的更多相关文章
- Javascript中数组查重的方法总结大全
数组查重:简单点说,就是找出数组中重复的元素然后去除,最后得到一个没有重复元素的数组. // 方法一思路: 1.构建一个新的数组,用于存放结果. 2.for循环中每次从数组取出一个 ...
- js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法
var questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...
- Javascript数组求和的方法总结 以及由斐波那契数列得到的启发
一次面试中,面试官要求用三种不同的Javascript方法进行一个数字数组的求和,当时思来想去只想到了使用循环这一种笨方法,因此面试比较失败,在这里总结了六种Javascript进行数组求和的方法,以 ...
- JavaScript——数组的indexOf()方法在IE8中的兼容性问题
昨天在工作中遇到一个问题:数组的indexOf()方法在IE8中无效. 如以下代码在IE8中报错“对象不支持“indexOf”属性或方法”: var arr = [1,2,3]; var index ...
- JavaScript 数组相关基础方法
文章来源于:https://www.cnblogs.com/dolphinX/p/3353590.html 创建数组 构造函数 1.无参构造函数,创建一空数组 var a1=new Array(); ...
- JavaScript数组的一些方法集合
数组方法集合 push()添加到数组末尾,并返回修改后数组的长度 var a=array.push('a','b'); alert(a);//2 pop() 移除数组最后一项,返回移除的项. shif ...
- Javascript数组Array的方法总结!
1.join() 将数组的元素组成一个字符串,以分隔符连接,如果省略则默认逗号为分隔符,该方法只接收一个参数:分隔符.此方法不会改变原数组. let arr = [1,2,3,4] let arr1 ...
- javascript数组中的方法
数组中的方法 今天我们来说一下,对数组进行操作的几种方法: //添加 a=[];//空数组 a[0]="我是第一个"; a[2]="我是第三个"; ...
- javascript 数组去重的方法
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 方法一 //注意有一个元素是空的 var test1 = [0, 0, 1, 1, 2, 'sss', 2 ...
随机推荐
- jQuery之ajax实现篇
jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧. 实现功能 由于jq中的ajax方法是用了内置的deferred模块,是P ...
- RabbitMq应用二
在应用一中,基本的消息队列使用已经完成了,在实际项目中,一定会出现各种各样的需求和问题,rabbitmq内置的很多强大机制和功能会帮助我们解决很多的问题,下面就一个一个的一起学习一下. 消息响应机制 ...
- CSS 选择器及各样式引用方式
Css :层叠样式表 (Cascading Style Sheets),定义了如何显示HTML元素. 目录 1. 选择器的分类:介绍ID.class.元素名称.符合.层次.伪类.属性选择器. 2. 样 ...
- Android权限管理之Android 6.0运行时权限及解决办法
前言: 今天还是围绕着最近面试的一个热门话题Android 6.0权限适配来总结学习,其实Android 6.0权限适配我们公司是在今年5月份才开始做,算是比较晚的吧,不过现在Android 6.0以 ...
- 基于DFA敏感词查询的算法简析
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要对敏感词做一个过滤,首先有几个方案可以选择: a.直 ...
- 七牛云:ckeditor JS SDK 结合 C#实现多图片上传。
成功了,搞了2天.分享一下经验. 首先是把官方的那个例子下载下来,然后照如下的方式修改. 其中tempValue是一个全局变量. function savetoqiniu() { var upload ...
- 卸载oracle之后,如何清除注册表
之前卸载了oracle,今天偶然间发现,在服务和应用程序里面,还残存着之前的oracle服务.原来,还需要去清理下注册表. 在开始菜单的这个框里面 输入regedit,进入注册表.找到这个目录 HKE ...
- 推荐一个ASP.NET网站内容管理系统源码
许多人都有各自的兴趣,如打球.踢毽子.看书.看电视.玩游戏等等....我近来迷上了猜灯谜,于是业余做了一个在线猜灯谜的网站:何问起谜语. 先出个谜语让你猜猜:不可缺一点(打一字).可以在线猜:http ...
- nginx服务器安装及配置文件详解
nginx在工作中已经有好几个环境在使用了,每次都是重新去网上扒博客,各种编译配置,今天自己也整理一份安装文档和nginx.conf配置选项的说明,留作以后参考.像负载均衡配置(包括健康检查).缓存( ...
- Mysql - 触发器/视图
触发器在之前的项目中, 应用的着实不多, 没有办法的时候, 才会去用这个. 因为这个东西在后期并不怎么好维护, 也容易造成紊乱. 我最近的项目中, 由于数据库设计(别人设计的)原因, 导致一些最简单功 ...