EcmaScript6提供了新的数据结构 Set,与之还有map。它类似于数组,但是成员的值都是唯一的,没有重复的值,也没有键和对。
并且Set也是一个构造函数,用来生成 Set 数据结构。既然他的成员都是唯一的,那么我们可以通过它来做一些文章,比如数组去重:
const s = new Set();
let arr = [1, 2, 3, 4, 5, 6, 7, 2, 3];
arr.forEach(item => s.add(item));
console.log(s);//Set//展开后是[1,2,3,4,5,6,7]
但是这样输出的是Set型,并不是我们想要的,我们想要的是数组。于是便有两种方法:
//数组去重方式1
let arr = [1, 2, 3, 4, 5, 6, 7, 2, 3];
let arrSet = [...new Set(arr)];
console.log(arrSet);
用ES6的语法,...把它展开,再用[]包起来,所以变成了数组,这是方法1.
const items = new Set([1, 2, 3, 4, 5, 6, 7, 2, 3]);
const array = Array.from(items);
console.log(array);
第二种方法是用Array.from来让Set转换成数组。同样可以达成目的。
Set这么好用,我们不妨封装成一个方法?
function dedupe(array) {
return Array.from(new Set(array));
}
dedupe([1, 1, 2, 3]) // [1, 2, 3]
于是,一个数组去重的方法就这样完成啦~
网友评论