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