ES6提供了一种新的数据结构Set,它与Array结构非常相似,但是Set中成员的值是唯一的,没有重复值。创建一个SetSet对象来存储任何类型的唯一值,无论它是原始值还是对象引用。创建Set的实例需要使用Set的构造函数,传入的参数只能是可迭代的对象,例如数组和字符串。示例:创建一个空集:letset1=newSet();console.log(set1);//输出:Set{}创建并初始化一个setletset2=newSet([1,2,3,2,1]);console.log(set2);//Output:Set{1,2,3}上述代码中,表名Set中的值必须唯一,不允许重复。Set方法和属性add()方法add()方法用于向Set添加元素并返回一个新的Set。例子:比如我们可以给Set添加不同类型的值:letset1=newSet();set1.add(1);set1.add('xkd');console.log(set1);//Output:Set{1,'xkd'}delete()方法delete()方法用于删除Set中的元素,返回一个布尔值判断删除是否成功。删除成功返回true,删除失败返回false。例子:删除Set中的指定元素:letset1=newSet([1,2,3,4,5]);控制台日志(set1.delete(4));//输出:trueconsole.log(set1);//输出:Set{1,2,3,5}如果指定元素在Set中不存在,则返回false,表示删除失败:console.log(set1.delete(10));//Output:falsehas()方法has()方法用于判断一个值是否是Set的成员,返回一个布尔值。示例:让set1=newSet([1,2,3,4,5]);控制台日志(set1.has(2));//输出:trueconsole.log(set1.has(7));//输出:false上面代码中,2是set1的成员,所以返回true,而7不是,所以返回false。clear()方法clear()方法用于清除Set中的所有成员。示例:letset1=newSet([1,2,3,4,5]);set1.clear();console.log(set1);//输出:Set{}size属性size属性返回当前Set中的元素总数。示例:让set1=newSet([1,2,3,4,5]);控制台日志(set1.size);//output:5Set遍历操作Set结构的实例有四种遍历方法,可以用来迭代Set的成员。一起来看看吧。keys()方法keys()方法是一个用于返回键名的迭代器。示例:letset_k=newSet(['xkd','Iven','summer']);console.log(set_k.keys());//output:[SetIterator]{'xkd','Iven','summer'}values()方法values()方法是一个返回键值的迭代器。示例:letset_v=newSet(['xkd','Iven','summer']);console.log(set_v.values());//output:[SetIterator]{'xkd','Iven','summer'}因为Set结构没有键名,只有键值,或者键名和keyvalue是一样的,所以keys方法和values方法的行为是完全一样的。entries()方法entries()方法是一个用于返回键值对的迭代器。示例:letset_e=newSet(['xkd','Iven','summer']);console.log(set_e.entries());输出:[SetEntries]{['xkd','xkd'],['Iven','Iven'],['summer','summer']}forEach()方法forEach()方法使用回调函数遍历每个成员。示例:让set_f=newSet(['xkd','Iven','summer']);set_f.forEach(function(value,key){console.log(value+":"+key);})输出:xkd:xkdIven:Ivensummer:summerforEach方法的参数是一个回调函数。该函数的参数与数组的forEach一致,分别是键值、键名、集合本身。这里需要注意的是,Set结构体的键名就是键值,所以第一个参数和第二个参数的值总是一样的。forEach方法还可以有第二个参数,它表示绑定处理程序函数中的this对象。Set对象的函数去重letset1=newSet([1,2,3,4,2,4]);控制台日志(set1);//Set{1,2,3,4}unionvarset1=newSet([1,2,3]);varset2=newSet([7,6,1]);varunion=newSet([...set1,...set2]);console.log(联合);//输出:Set{1,2,3,7,6}intersectionvarset1=newSet([1,2,3]);varset2=newSet([7,6,1]);letinter=newSet([...set1].filter(x=>set2.has(x)))//{4,5}console.日志(内部);//输出:Set{1}differencesetvarset1=newSet([1,2,3]);varset2=newSet([7,6,1]);vardiff=newSet([...set1].filter(x=>!set2.has(x)));//{1}console.log(diff);//输出:Set{2,3}Set类型转换Set类型的值可以和其他数据类型进行转换,我们来看看。将数组转换为集合:letarr1=["x","k","d"];letset1=newSet(arr1);console.log(set1);//Output:Set{'x','k','d'}设置为数组:可以通过展开运算符实现....让set1=newSet(["x","k","d"]);vararr1=[...set1];console.log(arr1);//输出:['x','k','d']String转换为Set:letset1=newSet('xkd');控制台日志(set1);//output:Set{'x','k','d'}注意,Set中的toString方法不能将Set转成String类型。
