声明:本文章转载自网上
首先定义一个数组,这里就定义一个简单重复数组,这样还可以测试下这几种方法的性能。(没中方法运行5次取平均值)
var data =[];
for(var i=0;i<100000;i++){
data.push(i%100);
}
- 第一种(平均用时为23毫秒)
var time1 = new Date().getTime();
Array.prototype.unique = function() {
return Array.from(new Set(this));
}
- 第二种(平均需要115.8毫秒)
Array.prototype.unique = function() {
var json = {};
var result = [];
this.forEach(function(value){
var type = Object.prototype.toString.call(value).match(/\s(\w+)/)[1].toLowerCase();
if(!((type + '-'+value) in json)){
json[type + '-'+value] = true;
result.push(value);
}
})
return result;
}
- 第三种(平均需要51毫秒)
Array.prototype.unique = function() {
var sortArr = this.sort();
return sortArr.filter(function(v,i,context){
return v !== context[i+1];
})
}
- 第四种方法 (平均耗时106.4毫秒)
Array.prototype.unique = function() {
var result = [];
this.forEach(function(v){
if(!result.includes(v)){
result.push(v);
}
})
return result;
}
- 第五种方法 (平均耗时50.4)
Array.prototype.unique = function() {
var sortArr = this.sort(), result = [];
sortArr.reduce((v1,v2) => {
if(v1 !== v2){
result.push(v1);
}
return v2;
})
result.push(sortArr[sortArr.length - 1]);
return result;
}