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 相关文章推荐
文本框中,回车键触发事件的js代码[多浏览器兼容]
Jun 07 Javascript
基于JQuery的asp.net树实现代码
Nov 30 Javascript
对jQuery的事件绑定的一些思考(补充)
Apr 20 Javascript
js之事件冒泡和事件捕获详细介绍
Oct 28 Javascript
JS小功能(button选择颜色)简单实例
Nov 29 Javascript
javascript 按键事件(兼容各浏览器)
Dec 20 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
Jan 25 Javascript
第一次接触Bootstrap框架
Oct 24 Javascript
基于BootstrapValidator的Form表单验证(24)
Dec 12 Javascript
vue.js实现带日期星期的数字时钟功能示例
Aug 28 Javascript
Vue axios全局拦截 get请求、post请求、配置请求的实例代码
Nov 28 Javascript
node删除、复制文件或文件夹示例代码
Aug 13 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
php PDO中文乱码解决办法
2009/07/20 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
2012/11/07 PHP
php实现文件下载更能介绍
2012/11/23 PHP
php中的PHP_EOL换行符详细解析
2013/10/26 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
ThinkPHP调试模式与日志记录概述
2014/08/22 PHP
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
jQuery 操作XML入门
2008/12/25 Javascript
HTML5附件拖拽上传drop &amp; google.gears实现代码
2011/04/28 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
jQuery满意度星级评价插件特效代码分享
2015/08/19 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
HTML元素拖拽功能实现的完整实例
2020/12/04 Javascript
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
python实现rsa加密实例详解
2017/07/19 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
python自动化之Ansible的安装教程
2019/06/13 Python
特步官方商城:Xtep
2017/03/21 全球购物
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
Shein英国:女性时尚网上商店
2019/04/10 全球购物
一个C/C++编程面试题
2013/11/10 面试题
服务承诺口号
2014/05/22 职场文书
远程培训的心得体会
2014/09/01 职场文书
处级干部反四风个人对照检查材料思想汇报
2014/09/27 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
爱心捐助活动总结
2015/05/09 职场文书