求一个javascript数组去重方法?
关注者
184被浏览
49,72444 个回答
// ES6
function unique (arr) {
const seen = new Map()
return arr.filter((a) => !seen.has(a) && seen.set(a, 1))
}
// or
function unique (arr) {
return Array.from(new Set(arr))
}
跑个分。
var arr = [];
var num = 0;
for (var i = 0; i < 10000; i++) {
num = i%4;
if(num == 0)
arr.push(Math.floor(Math.random() * 99999));
if(num == 1){
arr.push(function(){
var some = Math.random();
})
}
if(num == 2){
arr.push({
a:Math.random()
})
}
if(num == 3)
arr.push(Math.floor(Math.random() * 99999));
}
function deRepeat() {
var myarr = arr;
var startTime = (new Date()).valueOf();
var len = myarr.length;
var tmparr = [];
var tmp = {};
for (var i = 0; i < len; i++) {
if (tmp[myarr[i]] == undefined) {
tmp[myarr[i]] = 1
tmparr.push(myarr[i])
}
}
return (new Date()).valueOf() - startTime;
}
function unique(arr) {
var startTime = (new Date()).valueOf();
const seen = new Map()
arr.filter((a) => !seen.has(a) && seen.set(a, 1))
return (new Date()).valueOf() - startTime;
}
function uniq(array) {
var startTime = (new Date()).valueOf();
for (var i = array.length; i--;) {
var n = array[i]
// 先排除 即 如果它是清白的 后面就没有等值元素
array.splice(i, 1, null)
if (~array.indexOf(n)) {
array.splice(i, 1); //不清白
} else {
array.splice(i, 1, n); //清白
}
}
return (new Date()).valueOf() - startTime;
}
function cacl(arr, callback) {
var ret;
for (var i = 0; i < arr.length; i++) {
ret = callback(arr[i], ret);
}
return ret;
}
Array.prototype.sum = function() {
return cacl(this, function(item, sum) {
if (typeof(sum) == 'undefined') {
return item;
} else {
return sum += item;
}
});
};
Array.prototype.avg = function() {
if (this.length == 0) {
return 0;
}
return this.sum(this) / this.length;
};
function bench() {
var c = [];
var d = [];
var e = [];
for (var i = 0; i < 100; i++) {
c.push(deRepeat(arr));
d.push(unique(arr));
e.push(uniq(arr));
}
console.log('origin:');
console.log(c.avg());
console.log('尤雨溪:');
console.log(d.avg());
console.log('郑海波:');
console.log(e.avg());
}
bench()