JavaScript几种数组去重方法
学习了ES6之后,接触了2种更为简洁的方法
方法一:
functionunique1(arr) {
//定义常量 res,值为一个Map对象实例
constres=newMap();
//返回arr数组过滤后的结果,结果为一个数组
//过滤条件是,如果res中没有某个键,就设置这个键的值为1
returnarr.filter((a) => !res.has(a) &&res.set(a,1))
}
这个方法主要是利用了ES6的Map数据结构的特性和数组的filter()方法。
方法二:
functionunique2(arr) {
//通过Set对象,对数组去重,结果又返回一个Set对象
//通过from方法,将Set对象转为数组
returnArray.from(newSet(arr));
}
这个方法主要是利用了ES6的Set数据结构和数组的from()方法。
甚至还可以这么写......
...new Set(array)
这些都是ES6的新特性带来的简洁。
还有一种是利用includes()方法实现:
方法三:
functionunique3(arr) {
letnewarr= [];
for(leti=0;i
if(!newarr.includes(arr[i])){
newarr.push(arr[i]);
}
}
returnnewarr;
}
很好懂,不作解释。
利用json实现数组去重
方法四:
Array.prototype.unique=function() {
letkey= {}; //利用json键值唯一的原理实现去重
letnewarr= []; //存放新的不重复的数组
letlen=this.length; //记录重复数组的长度,提升性能
for(leti=0;i
lett=this[i];
if(key[t] ||t===undefined)continue;
//json的键值不重复,唯一
假如 key[1]存在的话,也就说明,1已经存在不重复的数组中了。
如果key里面存在的话跳出本次循环
key[t] =t;
//给key赋值,赋值后,下次if判断的时候就会跳过,就不会再赋值,这就实现了去重。
只有key里面不存在的时候才会添加到新的数组中。
newarr.push(t);
}
returnnewarr;
};
当然还有很多方法,欢迎讨论。