JS数据去重的方法至少有五六种,只是时间复杂度和空间复杂度都不尽人意,有没有比较高效的数组去重的方法?
你都知道5 6种方法了。。。
我只知道3种。。。
不过我觉得有一种是比较巧妙的:
先创建一个对象,然后遍历一次数组,把数组的元素的值作为对象的属性名,并且设置值为true
比方
var arr = [1, 3, 3, 1, 5, 2, 1]
你可以得到这样的一个对象
a = { "1": true, "3": true, "5": true, "2": true }
然后你再把对象转变成一个新数组
如果在数组元素较多的情况下,这种方法循环的次数应该是最少的吧
Array.prototype.myfilter=function(index){
var obj={};
return this.filter(function(item){
obj[item]=obj[item]||0;
return obj[item]++<index;
});
}
循环次数为n;
针对数组保存数据为非对象数据的去重;
参数index表示删除重复index次数的数据;
哈希算法去重
Array.prototype.unique = function() {
// n为hash表,r为临时数组
var n = {}, r = [];
for (var i = 0; i < this.length; i++) {
// 如果hash表中没有当前项
if (!n[this[i]]) {
// 存入hash表
n[this[i]] = true;
// 把当前数组的当前项push到临时数组里面
r.push(this[i]);
}
}
return r;
}
可以参考一下这个博客JS数组去重
8 回答4.4k 阅读✓ 已解决
6 回答2.9k 阅读✓ 已解决
5 回答2.5k 阅读✓ 已解决
5 回答6.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答2.4k 阅读
4 回答2.7k 阅读✓ 已解决
用es6的Set对象呗