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.camelCase()学习string.replace() 函数学习
Sep 13 Javascript
javascript中取前n天日期的两种方法分享
Jan 26 Javascript
判断及设置浏览器全屏模式
Apr 20 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
May 14 Javascript
angularjs的一些优化小技巧
Dec 06 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
May 19 Javascript
jquery模拟进度条实现方法
Aug 03 Javascript
jQuery 限制输入字符串长度
Jun 20 Javascript
javascript正则表达式中分组详解
Jul 17 Javascript
JavaScript编写一个贪吃蛇游戏
Mar 09 Javascript
在VUE中使用lodash的debounce和throttle操作
Nov 09 Javascript
多种类型jQuery网页验证码插件代码实例
Jan 09 jQuery
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中cookies使用指南
2007/03/16 PHP
深入php多态的实现详解
2013/06/09 PHP
php中fgetcsv()函数用法实例
2014/11/28 PHP
完美的php分页类
2017/10/24 PHP
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
微信小程序实现分享商品海报功能
2019/09/30 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
python3正则模块re的使用方法详解
2020/02/11 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
Python学习笔记之装饰器
2020/08/06 Python
让IE6支持css3,让 IE7、IE8 都支持CSS3
2011/10/09 HTML / CSS
HTML5图片预览实例分享
2014/06/04 HTML / CSS
YesStyle美国/全球:购买亚洲时装、美容化妆品和生活百货
2017/01/16 全球购物
护理助产毕业生的求职信
2014/03/02 职场文书
个人三严三实对照检查材料
2014/09/25 职场文书
工伤死亡理赔协议书
2014/10/20 职场文书
环保主题班会教案
2015/08/13 职场文书
交通安全教育心得体会
2016/01/15 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python