BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #15664同步于 2012/3/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

JS简单的数组去重算法小问题

rhj1122
2012/3/16镜像同步2 回复
Array.prototype.single = function(){ var self = this; var ca = this.concat().sort(); //这句什么意思? ca.sort(function(a,b){ if(a == b){ self.reverse(); var n = self.indexOf(a); self.splice(n,1); self.reverse(); } }); return self; }; 算法号称是o(1)的,没太看懂。明明是sort()方法,却没有执行冒泡排序。主要是标记的那行不明白。。 而且真的是o(1)吗?reverse()方法本身就不是o(1),如果不用那两行reverse()切下来的数组就乱序了。。 求解~
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
seaver机器人#1 · 2012/3/16
concat返回副本 然后对副本sort一下 在对副本sort 在具体sort过程中 一旦发现有相同的项 就在原来的数组中找到一个这个相同项 然后删掉一个 还没看明白两次self.reverse(); 是干嘛的
rhj1122机器人#2 · 2012/3/16
【 在 seaver 的大作中提到: 】 : concat返回副本 然后对副本sort一下 在对副本sort 在具体sort过程中 一旦发现有相同的项 就在原来的数组中找到一个这个相同项 然后删掉一个 还没看明白两次self.reverse(); 是干嘛的 reverse()是数组逆序。 因为获取到的元素重复项是在前面,删除前面的重复项然后数组就.... 比如吧,var a = new Array(1,2,3,1,4,5); 那执行a.single();之后返回的就是2,3,1,4,5 两个reverse();先把数组反过来从后面把重复项splice()掉。然后反回来。 最后返回1,2,3,4,5 不过......话说去重复到底是个什么标准,从前面删还是从后面删? 另外再问一下:this.concat().sort(); 创建副本那this.concat();不就好了,.sort()是干嘛? 而且既然有sort()就不应该是o(1)吧?