javascript数组去重方法汇总

 前言

 数组去重已经是一个老生常谈的问题了,依然经久不息,经过岁月的变迁es标准的升级迭代,似乎有越来越多的方法和方式供我们使用,那么那种方式才是最优的?那种才是最简洁的?这个我们一起来探讨。

省略:传统的递归方法,这里我就不说了,是最传统也是最笨的方法。

 

方法一:es5使用filter

使用Array.prototype.filter()方法,对元素进行过滤;

相关资料:Array.prototype.filter()

var array = [2,"2",2,"2"];
// es5 使用filter
function unique(array) {
    var obj = {};
    return array.filter( (item,index) {
        var fullItem = (typeof item + item);
        return obj.hasOwnProperty(fullItem) ? false : (obj[fullItem] = true);
    });
}
console.log(unique(array)); [2,"2"]

 

方法二:使用es6 Set

Set里的元素只能出现一次,即元素是唯一的。

下面的代码中也使用了(...)扩展语句,简单来说就是把数组转换成n个对象的方法。

相关链接:Set

es6 使用Set特性(Set元素只会出现一次,即元素是唯一的)
let unique = (array) => [...new Set(array)]; (...)扩展语句,简单来说就是把数组参数转换为多个对象参数
console.log(unique(array)); 

 

方法三:使用es6 Map

Map也是es6新出的数据类型,方法set、has、get、clear、delete、keys都挺好用的。

相关链接:Map

es6 Map 本质使用的还是Array.prototype.filter()
 unique(array) {
let m = new Map();
return array.filter((item) => !m.has(item) && m.set(item,1));
}
console.log(unique(array));

 

总结

个人觉得最优的方案是第二种!欢迎补充,欢迎指正~

 

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...