两种常用的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 API学Jquery 之三 筛选
Apr 09 Javascript
jQuery AjaxQueue改进步骤
Oct 06 Javascript
js怎么终止程序return不行换jfslk
May 30 Javascript
有关jquery与DOM节点操作方法和属性记录
Apr 15 Javascript
JavaScript正则表达式实例详解
Oct 16 Javascript
javascript常用经典算法详解
Jan 11 Javascript
vue forEach循环数组拿到自己想要的数据方法
Sep 21 Javascript
详解CommonJS和ES6模块循环加载处理的区别
Dec 26 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
Jul 22 Javascript
js实现炫酷光感效果
Sep 05 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
Sep 16 Javascript
vue 使用localstorage实现面包屑的操作
Nov 16 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
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
2019/04/10 PHP
php查询内存信息操作示例
2019/05/09 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
2017/03/29 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
python 运算符 供重载参考
2009/06/11 Python
python发布模块的步骤分享
2014/02/21 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
2017/12/14 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
python文字转语音的实例代码分析
2019/11/12 Python
什么是python类属性
2020/06/10 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
Python如何实现机器人聊天
2020/09/10 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
2020/11/27 Python
python线程优先级队列知识点总结
2021/02/28 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
军训自我鉴定
2013/12/14 职场文书
婚礼证婚人证婚词
2014/01/13 职场文书
上海世博会口号
2014/06/19 职场文书
党员个人承诺书
2015/04/27 职场文书
起诉意见书范文
2015/05/19 职场文书
家长反馈意见及建议
2015/06/03 职场文书
安全守法证明
2015/06/23 职场文书