Js Array Unique

数组去重的算法有很多,主要分类三类:   直接去重:时间复杂度 O(n²)   这个方法没啥好介绍的,就是遍历到元素时候再遍历检测是否是重复,由于有两层嵌套的遍历,所以它的性能不高,不过它对数据本身的影响是最小的。   排序去重:时间复杂度 O(nlogn)   先对数组做一次排序,然后遍历数组时相同元素都在邻近的位置,一次遍历就可以搞定。但是需要考虑一个问题,对象是可能无法比较大小的。这个算法那也许在C++之类的语言中可以很容易使用,但由于JavaScript无法直接取到对象的地址,所以排序就没有依据了。要让对象变得可排序就需要为每个不同的对象都添加一个唯一ID。另外,即使可以排序,最后得到的结果中元素的顺序也是被排序后的。如果需要得到元素的初始顺序还需要额外的维护部分,所以这个算法非常不适合JavaScript。   字典去重:时间复杂度 O(n)   JavaScript对象本身就是个字典,所以字典去重的方式对于统一的原始类型数组非常容易使用。但和排序去重遇上了一样的问题,至少需要个唯一ID才可以作为字典的索引。所以我们不得不给对象加上唯一ID。当然这个ID可以是临时的,算法结束时销毁。但这就意味着这个算法需要操作对象本身,虽然大多数情况下并不会造成什么影响,但无法保证意外不发生。   下面是直接去重和字典去重的测试代码,既麻烦又不科学的排序去重的我就不写了。

最近的文章

some git

Here is an illustration, by Jon Loeliger. Both commit nodes B and C are parents of commit node A. Parent commits are ordered left-to-right.G H I J \ / \ / D E F \ | / \ \ | / | \|/ | B C \ / ...…

git继续阅读
更早的文章

inheritance in prototype

### 拷贝继承### 类式继承(用new的继承) function Aaa() { //父类 this.name='小明'; } Aaa..prototype.showName = function(first_argument) { alert(this.name); }; function Bbb() { //子类 Aaa.call(this); //继承父类构造函数里的属性 } Bbb.prototype = new Aaa(); //实现继承...…

继续阅读