I am houbiao beta 0.1

javascript学习笔记之数组去重

分类:Self

很常用的功能,也是面试里出现比较多的问题。再从新拿出来看看,顺便看一下效率问题。

方法有很多,大致归为两类吧,一类是利用对象的权举属性,一类是利用数组的排序,个人比较倾向于数组,对象嘛,太过强大了,有点浪费的意思,对象和数组比起来很显然了,数组一定是简单于对象的,在这种场合里咱们用数组就足矣,当然对象也是很不错的方法,咱们下边就来一一展示,看个人爱好及你真正应用的地方来决定哪种方法吧。

一.利用对象的属性来判断,从而达到去重效果:var arr = [1,2,3,4,5,11,12,13,14,15,2,3,4,5,6,12,13,14,15,16];//定义个数组var date_start = new Date();//记录当前时间var obj = {}; //定义对象 用于后边权举对象的方法var result = []; //用于过滤后存储结果的数组var len = arr.length;for (var j = 0; j < len; j++){//其实如果对结果不是很严格 可以用倒序循环 更快一些 var temp = arr[j]; if (obj[temp] !== 1){//如果对象不包含该方法 包含返回1 不包含返回undefined obj[temp] = 1;//没有则定义进去 result.push(temp);//将该值写入到结果数组里 }}console.log(result);//[1, 2, 3, 4, 5, 11, 12, 13, 14, 15, 6, 16]alert("用时--"+ (new Date() - date_start) +"--ms");//最后得出运行时间//for(var a in obj){ console.log(a +"-----");}//可以用这个方法查看咱们obj对象里的方法

二.利用数组的sort方法来达到去重效果:var date_start_2 = new Date();var len_2 = arr.length;var temp_sort = arr.sort();//默认排序 不按照1,2,3,4,5这样排序 而是 1,11,12,13,14,15,2,3,4,5var result_2 = [];for(var j = 0; j < len_2; j++){ var temp = temp_sort[j]; if(temp !== temp_sort[j - 1]){//因为已经排序过 所以只要判断是否跟上一个相同就可以了 result_2.push(temp);//合适的结果写进结果 大功告成 }}console.log(result_2);//[1, 11, 12, 13, 14, 15, 16, 2, 3, 4, 5, 6]alert("用时--"+ (new Date() - date_start_2) +"--ms");//最后得出运行时间

两种方法的执行效率在万单位以下基本没什么区别,超过十万百万便出现了偏差,当然,确实是数组的方法快于对象的方法的,为什么快,这就要追究到javascript数据访问的作用域了,书上看到过,顺序貌似是直接量-局部变量-全局变量-数组-对象差不多是这意思,我回家翻翻书再补上来。如果你有更好更高效率的方法欢迎留言提出。

3811 reads 7 comments

上一篇:javascript学习笔记之Ajax的POST与GET

回复信息

Mehmet

I was sresiouly at DefCon 5 until I saw this post.

Leave a comment

*