ES6 Set



ES6 Set

ES6 Set

集合是一种数据结构,允许您创建唯一值的集合。集合是处理单个对象或单个值的集合。
集合是类似于数组的值集合,但不包含任何重复项。它允许我们存储唯一值。它支持原始值和对象引用。
与映射类似,集合也是有序的,即集合中的元素按其插入顺序迭代。它返回集合对象。

语法

var s = new Set("val1","val2","val3");

让我们通过下面的例子来理解set的概念:

例子

let colors = new Set(['Green', 'Red', 'Orange', 'Yellow', 'Red']);
console.log(colors);

集合的所有元素必须是唯一的。因此,上面例子中的 colors 集合只包含四个不同的元素。成功执行上述代码后,我们将得到以下输出。
输出
Set { 'Green', 'Red', 'Orange', 'Yellow' }

让我们看看Set的属性和方法

Set Properties

属性 说明
Set.size 此属性返回设置对象中的值数。

Set.size

Set 对象的这个属性返回表示 Set 对象中元素数量的值。
示例
let colors = new Set(['Green', 'Red', 'Orange', 'Yellow', 'Red']);
console.log(colors.size);
console.log(colors);

输出
4
Set { 'Green', 'Red', 'Orange', 'Yellow' }

Set Methods

set 对象包括几个方法,列表如下:
方法 说明
Set.prototype.add(value) 它将一个新元素附加到 set 对象的给定值上。
Set.prototype.clear() 它从集合对象中删除所有元素。
Set.prototype.delete(value) 它删除与相应值关联的元素。
Set.prototype.entries() 它返回一个新的迭代器对象,该对象包含一个按插入顺序排列的Set对象中每个元素的数组。
Set.prototype.forEach(callbackFn[, thisArg]) 它执行一次回调函数。
Set.prototype.has(value) 当传递的值在 Set 中时,此方法返回 true。
Set.prototype.values() 它返回新的迭代器对象,该对象包含 Set 中每个元素的值,按插入顺序排列。
现在,我们将详细了解Set对象的上述方法。

Set.prototype.add(value)

此方法用于将具有现有值的新元素附加到 Set 对象。
示例
let colors = new Set(['Green', 'Red', 'Orange', 'Yellow', 'Red']);
colors.add('Violet');
colors.add('Indigo');
colors.add('Blue');
colors.add('Violet');
console.log(colors.size);
console.log(colors);

输出
7
Set { 'Green', 'Red', 'Orange', 'Yellow', 'Violet', 'Indigo', 'Blue' }

Set.prototype.clear()

它清除集合中的所有对象。
示例
let colors = new Set(['Green', 'Red', 'Orange', 'Yellow', 'Red']);
colors.add('Violet');
colors.add('Indigo');
colors.add('Blue');
colors.add('Violet');
colors.clear()
console.log(colors.size);

输出
0

Set.prototype.delete(value)

该方法用于从set对象中移除对应的传入值。
示例
let colors = new Set(['Green', 'Red', 'Orange', 'Yellow', 'Red']);
colors.add('Violet');
colors.add('Indigo');
colors.add('Blue');
colors.add('Violet');
colors.delete('Violet');
console.log(colors.size);
console.log(colors);

输出
6
Set { 'Green', 'Red', 'Orange', 'Yellow', 'Indigo', 'Blue' }

Set.prototype.entries()

它返回一个新的集合迭代器的对象。它包含每个元素的值数组。它维护插入顺序。
示例
let colors = new Set(['Green', 'Red', 'Orange', 'Yellow', 'Red']);
colors.add('Violet');
colors.add('Indigo');
colors.add('Blue');
colors.add('Violet');
var itr = colors.entries();
for(i=0;i<colors.size;i++)  {
    console.log(itr.next().value); 
}

输出
[ 'Green', 'Green' ]
[ 'Red', 'Red' ]
[ 'Orange', 'Orange' ]
[ 'Yellow', 'Yellow' ]
[ 'Violet', 'Violet' ]
[ 'Indigo', 'Indigo' ]
[ 'Blue', 'Blue' ]

Set.prototype.forEach(callbackFn[, thisArg])

它为每个Map条目执行一次指定的回调函数。
示例
let colors = new Set(['Green', 'Red', 'Orange', 'Yellow', 'Red']);
colors.add('Violet');
colors.add('Indigo');
colors.add('Blue');
colors.add('Violet');
function details(values){
    console.log(values);
}
colors.forEach(details);

输出
Green
Red
Orange
Yellow
Violet
Indigo
Blue

Set.prototype.has(value)

它返回布尔值,该值指示该元素以及相应的值是否存在于 Set 对象中。
示例
let colors = new Set(['Green', 'Red', 'Orange', 'Yellow', 'Red']);
colors.add('Violet');
colors.add('Indigo');
colors.add('Blue');
colors.add('Violet');
console.log(colors.has('Indigo'));
console.log(colors.has('Violet'));
console.log(colors.has('Cyan'));

输出
   true
true
false

Set.prototype.values()

它返回一个新的迭代器对象,该对象包括按插入顺序排列的 Set 对象中每个元素的值。
示例
let colors = new Set(['Green', 'Red', 'Orange', 'Yellow', 'Red']);
colors.add('Violet');
var val = colors.values();
console.log(val.next().value); 
console.log(val.next().value); 
console.log(val.next().value); 
console.log(val.next().value); 
console.log(val.next().value);

输出
Green
Red
Orange
Yellow
Violet

Weak Set

用于存储对象的集合。它类似于 Set 对象,因此它也不能存储重复值。与弱映射类似,弱集不能迭代。弱集只能包含可能被垃圾回收的对象。
弱集仅包括add(value)、delete(value)和has(value) Set 对象的方法。

示例

'use strict' 
   let ws = new WeakSet();  
   let obj = {msg:"Welcome Back!"}; 
   ws.add(obj); 
   console.log(ws.has(obj)); 
   ws.delete(obj); 
   console.log(ws.has(obj));

输出
   true
false

迭代器

迭代器是一个对象,它在终止时定义序列和返回值。它允许一次访问一组对象。 Set 和 Map 都包含返回迭代器的方法。
迭代器是带有 next() 方法的对象。当 next() 方法被调用时,迭代器返回一个对象以及 'value' 和 'done' 属性。
'done' 是一个布尔值,它在读取集合中的所有元素后返回 true。否则,它返回 false。
让我们了解迭代器和 Set 对象的实现。

示例

let colors = new Set(['Green', 'Red', 'Orange', 'Yellow', 'Red']);
var itr = colors.keys();
var itr1 = colors.entries();
var itr2 = colors.values();
console.log(itr.next());
console.log(itr1.next());
console.log(itr2.next());

输出
{ value: 'Green', done: false }
{ value: [ 'Green', 'Green' ], done: false }
{ value: 'Green', done: false }