当前位置: 首页 > 教程 > ECMAScript/ES6 >

ECMAScript/ES6集合/Set

精华
小牛编辑
175浏览
2023-03-14

集合是一种数据结构,可创建唯一值的集合。 集是处理单个对象或单个值的集合。Set是类似于数组的值的集合,但不包含任何重复项。它使可以存储唯一值, 它支持原始值和对象引用。
与映射相似,集合也被排序,即集合中的元素按其插入顺序进行迭代。 它返回设置的对象。

语法

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

通过使用以下示例来理解集合的概念:

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

集合的所有元素必须唯一。 因此,以上示例中的设置颜色仅包含四个不同的元素。 成功执行以上代码后将获得以下输出。

Set { 'Green', 'Red', 'Orange', 'Yellow' }

1.Set属性

序号 属性 说明
1 Set.size 此属性返回set对象中的值数。

1.1.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' }

2.Set方法

Set对象包括几种方法,其列表如下:

序号 方法 说明
1 Set.prototype.add(value) 它将新元素附加到set对象的给定值。
2 Set.prototype.clear() 从设置对象中删除所有元素。
3 Set.prototype.delete(value) 删除与相应值关联的元素。
4 Set.prototype.entries() 它返回一个新的迭代器对象,该对象包含按插入顺序的Set对象中每个元素的数组。
5 Set.prototype.forEach(callbackFn [,thisArg]) 它执行一次回调函数。
6 Set.prototype.has(value) 当传递的值在Set中时,此方法返回true
7 Set.prototype.values() 它以插入顺序返回新的迭代器对象,该对象包含Set中每个元素的值。

2.1.Set.prototype.add(value)

示例代码:

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' }

2.2.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

2.3.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' }

2.4.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' ]

2.5.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

2.6.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

2.7.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

3.弱集合

它用于存储对象的集合。 它类似于Set对象,因此它也不能存储重复值。 与弱映射相似,弱集合不能被迭代。 弱集合只能包含可能被垃圾回收的对象。

弱集合仅包括Set对象的add(value), delete(value)has(value)方法。

'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

4.迭代器

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

下面通过示例来了解IteratorSet对象的实现。

示例代码:

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 }