📅  最后修改于: 2021-01-01 04:02:48             🧑  作者: Mango
集合是一种数据结构,可让您创建唯一值的集合。集是处理单个对象或单个值的集合。
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' }
让我们看一下Set的属性和方法。
S.no. | Properties | Description |
---|---|---|
1. | Set.size | This property returns the number of values in the set object. |
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对象包括几种方法,其列表如下:
S.no. | Methods | Description |
---|---|---|
1. | Set.prototype.add(value) | It appends a new element to the given value of the set object. |
2. | Set.prototype.clear() | It removes all the elements from the set object. |
3. | Set.prototype.delete(value) | It removes the element which is associated with the corresponding value. |
4. | Set.prototype.entries() | It returns a new iterator object, which contains an array of each element in the Set object in insertion order. |
5. | Set.prototype.forEach(callbackFn[, thisArg]) | It executes the callback function once. |
6. | Set.prototype.has(value) | This method returns true when the passed value is in the Set. |
7. | Set.prototype.values() | It returns the new iterator object, which contains the values for each element in the Set, in insertion order. |
现在,我们将详细了解Set对象的上述方法。
此方法用于将具有现有值的新元素追加到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
输出量
[ '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。
让我们一起了解迭代器和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 }