ES6提供了新的数据结构Set,它类似与数组,但是成员值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成Set数据结构。const s = new Set();[2,3,5,4,5,2,2].forEach(x=>s.add(x));for(let i of s){ console.log(i);//2 3 5 4}上面代码通过add()方法向Set结构加入成员,结果表明Set结构不会添加重复的值。Set函数可以接受一个数组作为参数,用来初始化。//例子1const set = new Set([1,2,3,4,4]);[…set];//[1,2,3,4]//例子2const items = new Set([1,2,3,4,5,5,5,5]);items.size//5//例子3const set = new Set(document.querySelectorAll(‘div’));上面代码中,例一和例二都是Set函数接受数组作为参数,例三是接受类似数组的对象作为参数。上面代码也展示了一种去除数组重复成员的方法。//去除数组的重复成员[…new Set(array)]//去除字符串里面的重复字符[…new Set(‘ababbc’)].join(’’);//‘abc’//下面代码向Set实例添加了两个NaN,但是只能加入一个。这表明在Set内部两个NaN是相等。let set = new Set();let a = NaN;let b = NaN;set.add(a);set.add(b);set // Set {NaN}//另外,两个对象总是不相等的。let set = new Set();set.add({});set.size // 1set.add({});set.size // 2Set实例的属性和方法Set结构的实例有以下属性。-Set.prototype.constructor:构造函数,默认就是set函数。-Set.prototype.size:返回Set实例的成员总数。Set实例的方法分为两大类:操作方法和遍历方法。下面先介绍四个操作方法。-add(value):添加某个值,返回Set结构本身。-delete(value):删除某个值,返回一个布尔值,表示删除是否成功。-has(value):返回一个布尔值,表示该值是否为Set的成员。-clear();清除所有成员,没有返回值。下面这些属性和方法的示例如下:s.add(1).add(2).add(2);//注意2被加入了两次s.size//2s.has(1)//trues.has(2)//trues.has(3)//falses.delete(2);s.has(2)//false下面是一个对比,看看在判断是否包括一个键上面,Object结构和Set结构的写法不同。//对象的写法const properties ={ ‘width’:1, ‘height’:1};if(properties[someName]){ //do something}//Set的写法const properties = new Set();properties.add(‘width’);properties.add(‘height’);if(properties.has(someName)){ //do something}Array.from方法可以将Set结构转为数组。const items = new Set([1,2,3,4,5]);const array = Array.from(items);这就提供了去除数组重复成员的另一种方法。function dedupe(array){ return Array.from(new Set(array));};dedupe([1,1,2,3])//[1,2,3]遍历操作Set 结构的实例有四个遍历方法,可以用于遍历成员。-keys():返回键名的遍历器。-values():返回键值的遍历器。-entries():返回键值对的遍历器。-forEach():使用回调函数遍历每个成员。