js 巧妙去除数组中的重复项


Posted in Javascript onJanuary 25, 2010

时不时的看下YUI的源码, 总会有些收获.

一. YUI中的源码'

var toObject = function(a) { 
var o = {}; 
for (var i=0, j=a.length; i<j; i=i+1) { // 这里我调整了下, YUI源码中是i<a.length 
o[a[i]] = true; 
} 
return o; 
}; 
var keys = function(o) { 
var a=[], i; 
for (i in o) { 
if (o.hasOwnProperty(i)) { // 这里, YUI源码中是lang.hasOwnProperty(o, i) 
a.push(i); 
} 
} 
return a; 
}; 
var uniq = function(a) { 
return keys(toObject(a)); 
};

注:为了书写方便, 我省略了各方法前的类名, 大伙可自行查阅YUI的源码, 2.7.0b与2.8.0r4均可(此部分的代码是一样的).

二. 该方法的思路
1. 先以目标数组的值为key生成一个对象. 这一步是最核心的: 因为在一个对象中, key是无法重复的, 这样就很巧妙的排除了重复值;

2. 遍历生成的对象, 将这些key取出来放到一个数组中, OK, 到此就大功告成了!(简单吧, 只需两步就行)

三. 该方法的特点
1. 对于该方法, 不论数组有多少项, 都只会遍历两次, 在性能上的优势较明显(想想自己以前的做法: 对数组项进行逐个对比, 其性能之差, 可想而知).

2. 经我的测试, 该方法只适用于数组项为字符串, 数字的一维数组(我觉得, 对多维数组进行排除重复项的操作, 实在是太杯具了!).

其它的方法可以参考上一篇文章。

Javascript 相关文章推荐
js相册效果代码(点击创建即可)
Apr 16 Javascript
js实时获取系统当前时间实例代码
Jun 28 Javascript
js获取会话框prompt的返回值的方法
Jan 10 Javascript
全面理解JavaScript中的继承(必看)
Jun 16 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
Aug 02 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
Oct 13 Javascript
基于JavaScript实现类名的添加与移除
Apr 23 Javascript
vue router学习之动态路由和嵌套路由详解
Sep 21 Javascript
Bootstrap Table实现定时刷新数据的方法
Aug 13 Javascript
jquery中attr、prop、data区别与用法分析
Sep 25 jQuery
JavaScript如何判断input数据类型
Feb 06 Javascript
JS removeAttribute()方法实现删除元素的某个属性
Jan 11 Javascript
将函数的实际参数转换成数组的方法
Jan 25 #Javascript
javascript中利用数组实现的循环队列代码
Jan 24 #Javascript
document.getElementById为空或不是对象的解决方法
Jan 24 #Javascript
JavaScript 未结束的字符串常量常见解决方法
Jan 24 #Javascript
php gethostbyname获取域名ip地址函数详解
Jan 24 #Javascript
setTimeout与setInterval在不同浏览器下的差异
Jan 24 #Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
Jan 24 #Javascript
You might like
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
PHP抽象类 介绍
2012/06/13 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
php修改数组键名的方法示例
2017/04/15 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
javascript面向对象之定义成员方法实例分析
2015/01/13 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
Vue组件生命周期运行原理解析
2020/11/25 Vue.js
Python字典操作简明总结
2015/04/13 Python
python自带的http模块详解
2016/11/06 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
Python 加密与解密小结
2018/12/06 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
Python中os模块功能与用法详解
2020/02/26 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
python 绘制场景热力图的示例
2020/09/23 Python
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
生产管理的三大手法
2013/11/11 职场文书
年终考核评语
2014/01/19 职场文书
物流管理专业推荐信
2014/09/06 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
2014年统战工作总结
2014/12/09 职场文书
毕业证明模板
2015/06/19 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技