js采用ES6去重数组的三种方式 - 风之涯技术博客

标签搜索

js采用ES6去重数组的三种方式

小峰
2022年10月20日 / 0 评论 / 156 阅读 / 正在检测是否收录...

对于js去重数组的办法其实有很多,如果采用以前的方式,无疑代码量激增;今天来聊聊ES方式的数组去重方式

利用Set+扩展运算符 …

此种办法无疑是最简单的方式
代码如下

let arr = [1,'1',2,2,2,3,'3',4,4,undefined,undefined,null,'','',NaN,NaN]
let arrnew = [...new Set(arr)]
console.log(arrnew)

//运行结果 [1, '1', 2, 3, '3', 4, undefined, null, '', NaN]

Set是ES6新提供的数据结构,类似于数组,但是本身没有重复值。

第二种方式 利用Set对象和数组的Array.from方法

代码如下

let arr = [1,'1',2,2,2,3,'3',4,4,undefined,undefined,null,'','',NaN,NaN]
function unique(arr){
  return Array.from(new Set(arr));
}
let arrnew = unique(arr);
console.log(arrnew)

//运行结果 [1, '1', 2, 3, '3', 4, undefined, null, '', NaN]

简单来说,第二种方法比第一种要复杂。同样来简单解释一下。Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)。所以set结合Array.from同样可以达到数组去重的效果。不过需要注意的是,主流浏览器像Chrome,Firfox,Opera,Safari,包括微软的Edge,都是支持的,但是唯独IE系列不支持。

今天介绍的最后一种方式 利用Map对象和数组的filter方法

代码如下

let arr = [1,'1',2,2,2,3,'3',4,4,undefined,undefined,null,'','',NaN,NaN]
function unique(arr){
  let arr1 = new Map();
  return arr.filter((a) => !arr1.has(a) && arr1.set(a,1));
}
let arrnew = unique(arr);
console.log(arrnew)

//运行结果 [1, '1', 2, 3, '3', 4, undefined, null, '', NaN]

通过打印我们发现,确实实现了我们想要的效果。那么下面简单来解释一下。1.Map对象是ES6提供的一个新的数据结构,其中has的办法是返回一个布尔值,表示某个值是否存在当前的Mp对象之中,set的办法是给Map对象设置key/value。2.filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。所以说,Map对象结合filter方法可以达到数组去重的效果

3

评论 (0)

QQ
昵称
邮箱
取消