两种常用的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控制淡入淡出示例代码
Nov 12 Javascript
浅析JavaScript原型继承的陷阱
Dec 03 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
Mar 06 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
Jun 23 Javascript
JavaScript String 对象常用方法总结
Apr 28 Javascript
JS实现n秒后自动跳转的两种方法
Nov 30 Javascript
domReady的实现案例
Nov 23 Javascript
vue中动态绑定表单元素的属性方法
Feb 23 Javascript
Vue.js+Layer表格数据绑定与实现更新的实例
Mar 07 Javascript
Vue Router去掉url中默认的锚点#
Aug 01 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
Jan 21 Javascript
Vue $emit()不能触发父组件方法的原因及解决
Jul 28 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
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
jquery.alert 弹出式复选框实现代码
2009/06/15 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
基于angularJS的表单验证指令介绍
2016/10/21 Javascript
Vue 实用分页paging实例代码
2017/04/12 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
JQuery常见节点操作实例分析
2019/05/15 jQuery
js编写简易的计算器
2020/07/29 Javascript
Django中使用group_by的方法
2015/05/26 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
Python利用ElementTree模块处理XML的方法详解
2017/08/31 Python
python Pygame的具体使用讲解
2017/11/03 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
Jupyter加载文件的实现方法
2020/04/14 Python
django 模型中的计算字段实例
2020/05/19 Python
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
男方父母证婚词
2014/01/12 职场文书
保密普查工作实施方案
2014/02/25 职场文书
美术专业自荐信
2014/07/07 职场文书
2016大一新生军训感言
2015/12/08 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
oracle重置序列从0开始递增1
2022/02/28 Oracle
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript