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 相关文章推荐
JavaScript 不只是脚本
May 30 Javascript
读jQuery之六 缓存数据功能介绍
Jun 21 Javascript
parentElement,srcElement的使用小结
Jan 13 Javascript
js关于命名空间的函数实例
Feb 05 Javascript
JS组件Bootstrap Table使用方法详解
Feb 02 Javascript
JavaScript生成验证码并实现验证功能
Sep 24 Javascript
解读ES6中class关键字
Nov 20 Javascript
webpack的CSS加载器的使用
Sep 11 Javascript
详解几十行代码实现一个vue的状态管理
Jan 28 Javascript
一次微信小程序内地图的使用实战记录
Sep 09 Javascript
解决vue动态路由异步加载import组件,加载不到module的问题
Jul 26 Javascript
vue setInterval 定时器失效的解决方式
Jul 30 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
德劲1107的电路分析与打磨
2021/03/02 无线电
PHP人民币金额转大写实例代码
2015/10/02 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
js比较和逻辑运算符的介绍
2013/03/10 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
Js+Jq获取URL参数的集中方法示例代码
2014/05/20 Javascript
jQuery实现垂直半透明手风琴特效代码分享
2015/08/21 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
浅谈JS验证表单文本域输入空格的问题
2017/02/14 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
2017/07/11 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
js new Date()实例测试
2019/10/31 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
python人人网登录应用实例
2014/09/26 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
Python argparse模块使用方法解析
2020/02/20 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
国家地理在线商店:Shop National Geographic
2018/06/30 全球购物
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
哈弗商学院毕业生求职信
2014/02/26 职场文书
小学生优秀评语大全
2014/04/22 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
英文慰问信范文
2015/03/24 职场文书
2015年迎新晚会策划书
2015/07/16 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android
Python Matplotlib绘制等高线图与渐变色扇形图
2022/04/14 Python