前几日在做js-assessment时,发现其数组这一章里也有数组去重的这一问题:这个问题说起来十分简单,就是把数组中重复的元素去除。其实个人感觉数组去重问题实际上就是排序的升级版,目前开来最好的去重方法就是字典去重,这一点和排序中的基数排序不谋而合。下面就简单的说一说自己解决这个问题的思路。编写AOP时间函数对于解决数组去重算法的好坏,最终效率是第一位的,所以需要编写一个计算函数运行时间的切面函数。实现如下:Function.prototype.time = function() { var t1 = +new Date() , foo = this() , t2 = +new Date() return t2 - t1 //返回单位为毫秒}但是写完这个方法之后发现,对于要测试运行的函数而言,在进行测试之前不能够运行(即只能写成 foo.time() 的样子),这样就不能用普通传参的方法对其进行参数传递。突然想到了在前几日看到过prototypejs中的源码中有一个 bind 函数,其功能就在与给一个函数绑定特定上下文,且返回函数本身而不立即执行,于是就马上实现了这样一个函数,代码如下:Function.prototype.bind = function(ob) { var fn = this , slice = Array.prototype.slice , args = slice.call(arguments, 1) return function(){ return fn.apply(ob, args.concat(slice.apply(arguments))) } }写完这两个,我们就可以对测试函数进行运行时间计算,假如数组为 arr ,测试函数为 delrep ,则在实际操作中可以这样实现:delrep.bind(arr).time() (执行函数的同时输出运算时间)。双重循环去重在就去重方法讨论的文章中,愚人码头的文章里说到过这个方法,当然,作者本身也承认,这种双重for循环嵌套的方法在大数据量的情况下十分耗时。作者的源代码引用如下:Array.prototype.delRepeat=function(){ var newArray=new Array(); var len=this.length; for (var i=0;i