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的无刷新分页技术
Jun 11 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
Jan 03 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
Jun 05 Javascript
javascript实现全角转半角的方法
Jan 23 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
Feb 25 Javascript
微信js-sdk上传与下载图片接口用法示例
Oct 12 Javascript
详解微信小程序开发之城市选择器 城市切换
Jan 17 Javascript
通过webpack引入第三方库的方法
Jul 20 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
Aug 29 Javascript
element中的$confirm的使用
Apr 26 Javascript
在vue中使用Base64转码的案例
Aug 07 Javascript
js 数据类型判断的方法
Dec 03 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 ignore_user_abort与register_shutdown_function 使用方法
2009/06/14 PHP
从php核心代码分析require和include的区别
2011/01/02 PHP
PHP中其实也可以用方法链
2011/11/10 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
javascript 学习笔记(onchange等)
2010/11/14 Javascript
JavaScript Date对象 日期获取函数
2010/12/19 Javascript
javascript分页代码(当前页码居中)
2012/09/20 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
javaScript数组迭代方法详解
2016/04/14 Javascript
jQuery获取同级元素的简单代码
2016/07/09 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
Python 复平面绘图实例
2019/11/21 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
模范家庭事迹材料
2014/02/10 职场文书
质量安全标语
2014/06/07 职场文书
新学期红领巾广播稿
2014/10/04 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
检讨书怎么写?
2019/06/21 职场文书
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP
Vue2.0搭建脚手架
2022/03/13 Vue.js
python获取字符串中的email
2022/03/31 Python
Java的Object类的九种方法
2022/04/13 Java/Android
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle