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 相关文章推荐
jquery.ui.progressbar 中文文档
Nov 26 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
Jun 30 Javascript
js更优雅的兼容
Aug 12 Javascript
javascript针对DOM的应用实例(一)
Apr 15 Javascript
SeaJS入门教程系列之使用SeaJS(二)
Mar 03 Javascript
搭建pomelo 开发环境
Jun 24 Javascript
用AngularJS的指令实现tabs切换效果
Aug 31 Javascript
js事件源window.event.srcElement兼容性写法(详解)
Nov 25 Javascript
BootStrap Fileinput上传插件使用实例代码
Jul 28 Javascript
详解jenkins自动化部署vue
May 14 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
Oct 27 Javascript
Openlayers实现距离面积测量
Sep 28 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表单转换textarea换行符的方法
2010/09/10 PHP
PHP 日,周,月点击排行统计
2012/01/11 PHP
解析PHP中intval()等int转换时的意外异常情况
2013/06/21 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
PHP7变量处理机制修改
2021/03/09 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
再谈ie和firefox下的document.all属性
2009/10/21 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
JQuery的read函数与js的onload不同方式实现
2013/03/18 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
node.js基于mongodb的搜索分页示例
2017/01/22 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
python实现指定字符串补全空格的方法
2015/04/30 Python
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
eclipse创建python项目步骤详解
2019/05/10 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
Python如何读取、写入JSON数据
2020/07/28 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
Python-split()函数实例用法讲解
2020/12/18 Python
花坛标语大全
2014/06/30 职场文书
2015年大学团支部工作总结
2015/05/13 职场文书
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL