两种常用的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 相关文章推荐
js跨域问题之跨域iframe自适应大小实现代码
Jul 17 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
Aug 27 Javascript
关于js注册事件的常用方法
Apr 03 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
Oct 15 Javascript
快速学习AngularJs HTTP响应拦截器
Dec 31 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
Sep 14 Javascript
JavaScript实现的select点菜功能示例
Jan 16 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
Jan 24 Javascript
vue 请求后台数据的实例代码
Jun 22 Javascript
基于LayUI实现前端分页功能的方法
Jul 22 Javascript
微信小程序 上传头像的实例详解
Oct 27 Javascript
ES6中的类(Class)示例详解
Dec 09 Javascript
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
计数器详细设计
2006/10/09 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
SSO单点登录的PHP实现方法(Laravel框架)
2016/03/23 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
Laravel 简单实现Ajax滚动加载示例
2019/10/22 PHP
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
ie 调试javascript的工具
2009/04/29 Javascript
javascript 流畅动画实现原理
2009/09/08 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
JavaScript也谈内存优化
2014/06/06 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
在vue中封装可复用的组件方法
2018/03/01 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
Python2.7+pytesser实现简单验证码的识别方法
2017/12/29 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
Python reversed函数及使用方法解析
2020/03/17 Python
django model通过字典更新数据实例
2020/04/01 Python
销售人员自我评价怎么写
2013/09/19 职场文书
毕业自荐书
2013/12/09 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
小班下学期幼儿评语
2014/12/30 职场文书
教师年终个人总结
2015/02/11 职场文书
2015年收银工作总结范文
2015/04/01 职场文书