前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >javascript数组去重方法汇总

javascript数组去重方法汇总

作者头像
磊哥
发布2018-05-08 10:28:25
6300
发布2018-05-08 10:28:25
举报
文章被收录于专栏:王磊的博客王磊的博客

前言


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

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

方法一:es5使用filter


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

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

代码语言:javascript
复制
var array = [2, "2", 2, "2"];
// es5 使用filter
function unique(array) {
    var obj = {};
    return array.filter(function (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

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

方法三:使用es6 Map


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

相关链接:Map

代码语言:javascript
复制
var array = [2, "2", 2, "2"];
//es6 Map 本质使用的还是Array.prototype.filter()
function unique(array) {
let m = new Map();
return array.filter((item) => !m.has(item) && m.set(item, 1));
}
console.log(unique(array));

总结


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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-01-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 方法一:es5使用filter
  • 方法二:使用es6 Set
  • 方法三:使用es6 Map
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档