集合是一种数据结构,可创建唯一值的集合。 集是处理单个对象或单个值的集合。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.size | 此属性返回set对象中的值数。 |
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对象包括几种方法,其列表如下:
序号 | 方法 | 说明 |
---|---|---|
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中每个元素的值。 |
示例代码:
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' }
清除集合中的所有对象。
示例代码
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
对象中删除相应的传递值。
示例代码:
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' }
它返回一个新的集合迭代器的对象。 它包含每个元素的值的数组,它保持插入顺序。
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' ]
它为每个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对象中是否存在。
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对象中每个元素的值。
示例代码:
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
它用于存储对象的集合。 它类似于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
迭代器是一个对象,它定义序列和终止时的返回值。 它允许一次访问一组对象。 Set和Map都包含返回迭代器的方法。迭代器是具有next()
方法的对象。 当next()
方法被调用时,迭代器将返回一个对象以及'value'
和'done'
属性。'done'
是一个布尔值,在读取集合中的所有元素后返回true
。 否则它返回false
。
下面通过示例来了解Iterator
和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 }