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不是基础的基础
Dec 24 Javascript
javascript prototype 原型链
Mar 12 Javascript
理解JavaScript的caller,callee,call,apply
Apr 28 Javascript
jquery imgareaselect 使用利用js与程序结合实现图片剪切
Jul 30 Javascript
JavaScript实现网页图片等比例缩放实现代码及调用方式
Feb 25 Javascript
wap手机端解决返回上一页的js实例
Dec 08 Javascript
手机端js和html5刮刮卡效果
Sep 29 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
May 09 Javascript
AngularJS路由Ui-router模块用法示例
May 29 Javascript
jQuery实现仿京东防抖动菜单效果示例
Jul 06 jQuery
详解vue引入子组件方法
Feb 12 Javascript
javascript自定义加载loading效果
Sep 15 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
学习使用curl采集curl使用方法
2012/01/11 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
Javascript - HTML的request类
2007/01/09 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
JavaScript this关键字的深入详解
2021/01/14 Javascript
Python 专题一 函数的基础知识
2017/03/16 Python
Python实现Linux中的du命令
2017/06/12 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
python实现二维数组的对角线遍历
2019/03/02 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
python sorted函数原理解析及练习
2020/02/10 Python
python 实现线程之间的通信示例
2020/02/14 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
matplotlib.pyplot.plot()参数使用详解
2020/07/28 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
Sql面试题
2013/03/20 面试题
市场部规章制度
2014/01/24 职场文书
电气工程自动化求职信
2014/03/14 职场文书
红色旅游心得体会
2014/09/03 职场文书
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL