JavaScript去掉数组中的重复元素


Posted in Javascript onJanuary 13, 2011

在写程序过程中,经常会遇到去除数组中重复元素的需求。要实现这个功能其实并不难。
我们可以用一个两重循环来实现,对于小的数组,这样做当然并无不妥。
但如果我们的数组比较大,里面的元素有上万个。那么用两重循环,效率是极为低下。
下面我们就用js的特性,编写一个高效去除数组重复元素的方法。

<script> 
function unique(data){ 
data = data || []; 
var a = {}; 
for (var i=0; i<data.length; i++) { 
var v = data[i]; 
if (typeof(a[v]) == 'undefined'){ 
a[v] = 1; 
} 
}; 
data.length=0; 
for (var i in a){ 
data[data.length] = i; 
} 
return data; 
} 
function test(){ 
var arr = [9,1,3,8,7,7,6,6,5,7,8,8,7,4,3,1]; 
var arr1 = unique(arr); 
alert(arr1.join(",")); 
} 
test(); 
</script>

输出结果:
9,1,3,8,7,6,5,4
js数组去重就是把数组中重复的元素去掉:
Array.prototype.delRepeat=function(){ 
var newArray=new Array(); 
var len=this.length; 
for (var i=0;i<len ;i++){ 
for(var j=i+1;j<len;j++){ 
if(this[i]===this[j]){ 
j=++i; 
} 
} 
newArray.push(this[i]); 
} 
return newArray; 
}

但是很明显这里有for循环内嵌了另一个for循环,在大数据量下肯定非常耗时!效率低下!经过查找和高人指点优化了一个新方法:

Array.prototype.delRepeat=function(){ 
var newArray=[]; 
var provisionalTable = {}; 
for (var i = 0, item; (item= this[i]) != null; i++) { 
if (!provisionalTable[item]) { 
newArray.push(item); 
provisionalTable[item] = true; 
} 
} 
return newArray; 
}

就是使用一个临时的provisionalTable对象,将数组的值作为provisionalTable对象的键值,如果相应的值不存在就将这个数组的值push到新数组中。

效率是提高了,但是有个bug,就是假设数组中换用可转换的数字和字符串,比如数组[6,"6"]这时候就好被去掉一个。悲剧,同时求解决方法。

Javascript 相关文章推荐
jquery内置验证(validate)使用方法示例(表单验证)
Dec 04 Javascript
JS长整型精度问题实例分析
Jan 13 Javascript
jquery单选框radio绑定click事件实现方法
Jan 14 Javascript
JQuery实现的图文自动轮播效果插件
Jun 19 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
Sep 25 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
Sep 04 Javascript
在js中实现邮箱格式的验证方法(推荐)
Oct 24 Javascript
jQuery学习笔记之入门
Dec 14 Javascript
js实现鼠标移动到图片产生遮罩效果
Oct 21 Javascript
JavaScript设计模式之工厂模式简单实例教程
Jul 03 Javascript
vue+element加入签名效果(移动端可用)
Jun 17 Javascript
浅谈JS for循环中使用break和continue的区别
Jul 21 Javascript
javascript基础知识大集锦(二) 推荐收藏
Jan 13 #Javascript
javascript基础知识大集锦(一) 推荐收藏
Jan 13 #Javascript
myFocus slide3D v1.1.0 使用方法与下载
Jan 12 #Javascript
异步加载script的代码
Jan 12 #Javascript
数组方法解决JS字符串连接性能问题有争议
Jan 12 #Javascript
js对数字的格式化使用说明
Jan 12 #Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
Jan 12 #Javascript
You might like
GD输出汉字的函数的分析
2006/10/09 PHP
PHP访问MYSQL数据库封装类(附函数说明)
2010/12/04 PHP
Views rows style模板重写代码
2011/05/16 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
PHP执行SQL文件并将SQL文件导入到数据库
2015/09/17 PHP
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
详解no input file specified 三种解决方法
2019/11/29 PHP
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
JavaScript高级程序设计 读书笔记之八 Function类及闭包
2012/02/27 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
jQuery实现图片下载代码
2019/07/18 jQuery
详解vue实现坐标拾取器功能示例
2020/11/18 Vue.js
Python中将字典转换为列表的方法
2016/09/21 Python
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
和孩子一起学习python之变量命名规则
2018/05/27 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
法国在线药房:DoctiPharma
2020/10/21 全球购物
在校生党员自我评价
2013/09/25 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
护理见习报告范文
2014/11/03 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
2015年底工作总结范文
2015/05/15 职场文书
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python