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 相关文章推荐
人人网javascript面试题 可以提前实现下
Jan 05 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
Nov 22 Javascript
子页向父页传值示例
Nov 27 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
Jul 28 Javascript
node.js调用Chrome浏览器打开链接地址的方法
May 17 Javascript
ES6入门教程之Class和Module详解
May 17 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
Jul 17 jQuery
vue 实现复制内容到粘贴板clipboard的方法
Mar 17 Javascript
Angular 容器部署的方法
Apr 17 Javascript
浅谈vue父子组件怎么传值
Jul 21 Javascript
vue生命周期和react生命周期对比【推荐】
Sep 19 Javascript
antd Upload 文件上传的示例代码
Dec 14 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
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
js获取滚动距离的方法
2015/05/30 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
微信小程序实现文件预览
2020/10/22 Javascript
Python实现读取文件最后n行的方法
2017/02/23 Python
python决策树之CART分类回归树详解
2017/12/20 Python
python实现五子棋人机对战游戏
2020/03/25 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
2020/03/11 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
python中字典增加和删除使用方法
2020/09/30 Python
HTML5中canvas中的beginPath()和closePath()的重要性
2018/08/24 HTML / CSS
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
北京某科技有限公司C# .net笔试题
2014/09/27 面试题
大学毕业生个人自荐信范文
2014/01/08 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
擅自离岗检讨书
2014/09/12 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
小班教师个人总结
2015/02/05 职场文书
教师党员自我评价范文
2015/03/04 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
2019大学生实习报告
2019/06/21 职场文书