两种常用的javascript数组去重方法思路及代码


Posted in Javascript onMarch 26, 2013

第一种是比较常规的方法
思路:
1.构建一个新的数组存放结果
2.for循环中每次从原数组中取出一个元素,用indexOf查找新数组中是否有该元素
3.若没有,则存到结果数组中

Array.prototype.unique1 = function(){ 
var res = []; 
for(var i = 0; i < this.length; i++){ 
if(res.indexOf(this[i]) == -1){ 
res.push(this[i]); 
} 
} 
return res; 
} 
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0] 
alert(arr.unique1())

此基础上可以略微优化,但原理不变,效果也不明显
Array.prototype.unique1 = function(){ 
var res = [this[0]];//直接将原数组中的第一个元素存入构建的新数组中 
for(var i = 1; i < this.length; i++){//循环从第二个元素开始 
if(res.indexOf(this[i]) == -1){ 
res.push(this[i]); 
} 
} 
return res; 
} 
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0] 
alert(arr.unique1())

第二种方法比上面的方法效率要高
思路:
1.先将原数组进行排序
2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置
3.如果不相同,则将该元素存入结果数组中
Array.prototype.unique2 = function(){ 
this.sort(); //先排序 
var res = [this[0]]; 
for(var i = 1; i < this.length; i++){ 
if(this[i] !== res[res.length - 1]){ 
res.push(this[i]); 
} 
} 
return res; 
} 
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0] 
alert(arr.unique2())
Javascript 相关文章推荐
JQuery页面图片切换和新闻列表滚动效果的具体实现
Sep 26 Javascript
快速解决FusionCharts联动的中文乱码问题
Dec 04 Javascript
jquery实现焦点图片随机切换效果的方法
Mar 12 Javascript
Jquery时间轴特效(三种不同类型)
Nov 02 Javascript
jquery输入数字随机抽奖特效的简单实现代码
Jun 10 Javascript
JavaScript数组方法大全(推荐)
Jul 05 Javascript
微信小程序 支付简单实例及注意事项
Jan 06 Javascript
js实现点击切换checkbox背景图片的简单实例
May 08 Javascript
AngularJS 控制器 controller的详解
Oct 17 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
Mar 01 Javascript
微信小程序文章详情页跳转案例详解
Jul 09 Javascript
Vue接口封装的完整步骤记录
May 14 Vue.js
javascript变量作用域使用中常见错误总结
Mar 26 #Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
Mar 26 #Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
Mar 26 #Javascript
jquery 无限级联菜单案例分享
Mar 26 #Javascript
JSON辅助格式化处理方法
Mar 26 #Javascript
html+css+js实现xp window界面及有关功能
Mar 26 #Javascript
jquery图片放大镜功能的实例代码
Mar 26 #Javascript
You might like
php 伪静态之IIS篇
2014/06/02 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
JavaScript入门教程(3) js面向对象
2009/01/31 Javascript
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
过虑特殊字符输入的js代码
2010/08/05 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
用nodejs实现json和jsonp服务的方法
2017/08/25 NodeJs
Vue项目History模式404问题解决方法
2018/10/31 Javascript
跨域请求两种方法 jsonp和cors的实现
2018/11/11 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
浅谈Python 集合(set)类型的操作——并交差
2016/06/30 Python
Python实现Linux中的du命令
2017/06/12 Python
python使用super()出现错误解决办法
2017/08/14 Python
python生成圆形图片的方法
2020/03/25 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
详解Python传入参数的几种方法
2019/05/16 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
Java语言的优势
2015/01/10 面试题
爷爷追悼会答谢词
2014/01/24 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
Django框架模板用法详解
2022/06/10 Python