📜  ES6集

📅  最后修改于: 2021-01-01 04:02:48             🧑  作者: Mango

ES6套装

集合是一种数据结构,可让您创建唯一值的集合。集是处理单个对象或单个值的集合。

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.prototype.add(值)

此方法用于将具有现有值的新元素追加到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(值)

此方法用于从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

输出量

[ '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(值)

它返回一个布尔值,该值指示元素以及相应的值在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

弱集

它用于存储对象的集合。它类似于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 }