利用set实现去重
最近读了一些有关于ES6的文章,觉得真是一个超级大的进步,就是不知道兼容性怎么样,鉴于我还在初学,先写个小例子练手,顺便时刻提醒自己要坚持学下去。未来的趋势肯定是替代es5没跑了。
var arr=[1,2,1,3,2,4,5,1,3]; var setArr=new Set(arr); var newArr=[]; setArr.forEach(function(e){ newArr.push(e); }); console.log(newArr);
set是es6里新提出的一个集合的概念,类似于数组arr,同样不只是数字类型,其他类型的数据如字符串等也是支持的,set有个和数组不同的特性就是重复的元素加入集合中是无效的,因此一个数组,利用set.add来加入到这个集合中来就自动实现了去重的步骤。
以下是Set
支持的所有操作:
new Set
:创建一个新的、空的Set
。new Set(iterable)
:从任何可遍历数据中提取元素,构造出一个新的集合。set.size
:获取集合的大小,即其中元素的个数。set.has(value)
:判定集合中是否含有指定元素,返回一个布尔值。set.add(value)
:添加元素。如果与已有重复,则不产生效果。set.delete(value)
:删除元素。如果并不存在,则不产生效果。.add()
和.delete()
都会返回集合自身,所以我们可以用链式语法。set[Symbol.iterator]()
:返回一个新的遍历整个集合的迭代器。一般这个方法不会被直接调用,因为实际上就是它使集合能够被遍历,也就是说,我们可以直接写for (v of set) {...}
等等。set.forEach(f)
:直接用代码来解释好了,它就像是for (let value of set) { f(value, value, set); }
的简写,类似于数组的.forEach()
方法。set.clear()
:清空集合。set.keys()
、set.values()
和set.entries()
返回各种迭代器,它们是为了兼容Map
而提供的