两种常用的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中输入验证中一个不错的效果
Aug 21 Javascript
动态的创建一个元素createElement及删除一个元素
Jan 24 Javascript
iframe如何动态创建及释放其所占内存
Sep 03 Javascript
Javascript 赋值机制详解
Nov 23 Javascript
基于Bootstrap实现Material Design风格表单插件 附源码下载
Apr 18 Javascript
JS动态添加选项案例分析
Oct 17 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
Apr 24 Javascript
webpack手动配置React开发环境的步骤
Jul 02 Javascript
vue二级菜单导航点击选中事件的方法
Sep 12 Javascript
angular4应用中输入的最小值和最大值的方法
May 17 Javascript
vue组件命名和props命名代码详解
Sep 01 Javascript
vue 实现setInterval 创建和销毁实例
Jul 21 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
在smarty模板中使用PHP函数的方法
2011/04/23 PHP
php 地区分类排序算法
2013/07/01 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
PHP实现从上往下打印二叉树的方法
2018/01/18 PHP
PHP的PDO事务与自动提交
2019/01/24 PHP
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
详解javascript高级定时器
2015/12/31 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
javascript设计模式Constructor(构造器)模式
2016/08/19 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
关于uniApp editor微信滑动问题
2021/01/15 Javascript
python使用多线程不断刷新网页的方法
2015/03/31 Python
详解在Python程序中解析并修改XML内容的方法
2015/11/16 Python
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
Python实现字符串的逆序 C++字符串逆序算法
2020/05/28 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
零件设计自荐信范文
2013/11/27 职场文书
检查接待方案
2014/02/27 职场文书
股权收购意向书
2014/04/01 职场文书
创业融资计划书
2014/04/25 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
民主生活会剖析材料
2014/09/30 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
2014年财务经理工作总结
2014/12/08 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
python+opencv实现目标跟踪过程
2022/06/21 Python