前段时间遇到数组去重的问题,网上查到的资料也是参差不齐,有的实用有的简洁有的好记,所以在此把遇到的一些方法做一个记录,同时对一些常用方法时间消耗、以及难易程度做个比较。
Ps所有代码均在Firefox内做过测试。
一、利用es6中的set去重
set 是es6中新的数据结构,类似于数组,但其成员唯一,没有重复的值,无序。一般用[...myset]的形式转化为数组之后遍历。优点是代码简洁方便记忆速度也较快,缺点是……额还没发现缺点,要不然为啥放第一个23333
function func(arr){
return Array.from(new Set(arr));
}
var arr=[1,2,3,4,4,4,NaN,NaN,'NaN',true,'true',null,null,{},{},{}];
console.log(func(arr));
这是在Firefox浏览器内测试的结果,注意看到还无法去掉空对象
二、使用map
Map是js中的键值对结构,其查找速度极快。用其排序原理即遍历数组,向map内添加键值对,由于键不允许存在重复,自然利用map存储的元素也不会重复了。优点是效率极高,占用空间也较小,缺点是需要熟练掌握map用法。
var funcmap = function(arr){
let temp = new Map();
return arr.filter(item=>{return !temp.has(item) && temp.set(item,1);});
}
同上set,一样无法去掉空对象
三、使用对象属性无重复来对数组去重
此法相比上个方法由于是向对象内添加属性,其操作速度自然不如以上,但可以去除空对象,以及类似于字符串NaN,字符串true这种。(后文解释为什么会去除字符串NaN,字符串true)
var funcobject = function(arr) {
var array = [];
var obj = {};
f