Руководство ECMAScript Set Collection
View more Tutorials:
ECMAScript 6 представляет 2 новые структуры данных это Map & Set. Они являются частью в коллекции фреймворк (Collections Framework) у ECMAScript.
- Maps - Данная структура данных позволяет вам сохранять пары "Ключ/Значение" (Key/Value). И вы можете получить доступ в значение (value) через ключ(key), или обновить новое значение соответствующее с определенным ключом.
- Sets - Данная структура данных сохраняет список элементов, не позволяющих совпадать и не индексирующих элементы.
В данной статье я представлю вам Set.
Смотрите так же:
Set
Set это структура данных представленная в ECMAScript6, далее являются характеристики Set:
- Set это список содержащий элементы, но не позволяет повторяться.
- Set не индексирует элементы.
- Set это список с порядком (Ordered), это значит элемент добавленный первым будет стоять спереди. элемент добавленный после будет стоять сзади.
Constructors:
Создать объект Set черезconstructor класса Set:
new Set( [iterable] )
Параметры:
- iterable - Если данный объект передается (pass) в constructor у Set все элементы имеющие его будут добавлены в Set. Наоборот если вы не определили данный параметр, или его значение null то созданный объект Set будет пустым (empty).
Properties:
set-example.js
// Create a Set from an Array var fruits = new Set( ["Apple","Banana","Papaya"] ); console.log(fruits); // Set { 'Apple', 'Banana', 'Papaya' }
Property | Описание |
size | Данное свойство (Property) возвращает число элементов объекта Set. |
set-size-example.js
// Create a Set from an Array var fruits = new Set( ['Apple','Banana','Papaya'] ); var size = fruits.size; console.log(size); // 3
for..of
Вы можете использовать цикл for...of для повторения элементов у Set.
set-for-of-loop-example.js
// Create a Set from an Array var fruits = new Set( ["Apple","Banana","Papaya"] ); for(let fruit of fruits) { console.log(fruit); }

add(value)
Добавить элемент в конец Set если данный элемент не существует в Set. И вернуть данный объект Set.
set-add-example.js
// Create a Set from an Array var fruits = new Set( ["Apple","Banana","Papaya"] ); // Append an Element to the Set and returns this Set. var thisFruits = fruits.add("Cherry"); console.log(fruits); // Set { 'Apple', 'Banana', 'Papaya', 'Cherry' } // 'Set' does not allow duplicates fruits.add("Banana"); console.log(fruits); // Set { 'Apple', 'Banana', 'Papaya', 'Cherry' }

delete(value)
Данный метод используется для удаления элемента из Set. Метод возвращает true если находит элемент для удаления, напротив возвращает false.
set-delete-example.js
// Create a Set from an Array var fruits = new Set( ["Apple","Banana","Papaya"] ); console.log(fruits); // Set { 'Apple', 'Banana', 'Papaya' } // Delete an element: var deleted = fruits.delete("Banana"); console.log("Deleted? " + deleted); // true console.log(fruits); // Set { 'Apple', 'Papaya' }
clear()
Удаляет все элементы из Set.
set-clear-example.js
// Create a Set from an Array var fruits = new Set( ["Apple","Banana","Papaya"] ); console.log(fruits); // Set { 'Apple', 'Banana', 'Papaya' } // Remove all elements. fruits.clear(); console.log(fruits); // Set { } console.log("Size after clear: " + fruits.size);
entries()
Данный метод возвращает новый объект Iterator, где каждый его entry (ввод) содержит массив с 2-мя элементами [value, value], порядок entry сохраняется как порядок элементов в объекте Set. (Смотрите изображение ниже).

set-entries-example.js
// Create a Set from an Array var fruits = new Set( ["Apple","Banana","Papaya"] ); console.log(fruits); // Set { 'Apple', 'Banana', 'Papaya' } // Iterator Object: var iteratorEntries = fruits.entries(); var entry; while( !(entry = iteratorEntries.next() ).done ) { console.log(entry.value); // [ 'Apple', 'Apple' ] }
has(value)
Данный метод проверяет значение данное параметром существует в Set или нет. Возвращает true если существует, напротив возвращает false.
set-has-example.js
// Create a Set from an Array var fruits = new Set( ["Apple","Banana","Papaya"] ); var has = fruits.has("Banana"); console.log(has); // true
forEach(callbackFn[, thisArg])
Данный метод вызывает функцию callbackFn один раз для каждого элемента Set.
mySet.forEach(callbackFn [, thisArg])
Параметры:
- callbackFn - Данная функция будет вызвана один раз в соответствии с каждым элементом объекта Set.
- thisArg - Параметр используется как this при выполнении функции callbackFn.
set-forEach-example.js
// Create a Set from an Array var fruits = new Set( ["Apple","Banana","Papaya"] ); console.log(fruits); // Set { 'Apple', 'Banana', 'Papaya' } function showFruit(fruit, thisSet) { console.log("Fruit: " + fruit); } // Or Call: fruits.forEach(showFruit); fruits.forEach(showFruit, fruits);
key() & values()
Метод key() & values() возвращает новый объект Iterator, где каждый элемент у Iterator имеет вид {value: aValue, done: false}.

set-values-example.js
// Create a Set from an Array var fruits = new Set( ["Apple","Banana","Papaya"] ); var fruitIterator = fruits.values(); var entry; while ( !(entry = fruitIterator.next()).done) { console.log(entry); // { value: 'Apple', done: false } console.log(entry.value); // Apple }

mySet[Symbol.iterator]
Symbol.iterator являет специальным property объекта Set. По умолчанию, значение у mySet[Symbol.iterator] это метод values() объекта mySet.
set-symbol-iterator-example.js
// Create a Set from an Array var fruits = new Set( ["Apple","Banana","Papaya"] ); // Same as: fruits.values() var fruitIterator = fruits[Symbol.iterator](); var entry; while ( !(entry = fruitIterator.next()).done) { console.log(entry); // { value: 'Apple', done: false } console.log(entry.value); // Apple }
В основном WeakSet довольно похож на Set, но имеет следующие отличия:
- Элементы WeakSet должны быть объектами, не могут быть примитивным видом (Primitive).
- Элементы WeakSet могут быть удалены в процессе (process) коллекции мусора (Garbage collection), это независимый процесс для удаления неиспользующихся объектов в программе.
- WeakSet не поддерживает property: size, поэтому вы не можете знать сколько элементов он имеет.
- Имеется много методов в классе Set но не имеется класса WeakSet, например values(), keys(), clear(),..
Примечание: Вы не можете использовать цикл for..of для WeakSet, и нет способа, чтобы вы повторили (iterate) на элементах у WeakSet.
Создать объект WeakSet.
new Set( [iterable] )
Параметры:
- iterable - Если данный объект передается в (pass) constructor у WeakSet все элементы, которые он имеет будут добавлены в Set. Напротив, если вы не определили данный параметр, или его значение является null то созданный объект Set будет пустым (empty).
Methods:
Количество методов у WeakSet меньше по сравнению с количеством методов у Set:
- WeakSet.add(element)
- WeakSet.delete(element)
- WeakSet.has(element)
Элементы в WeakSet должны быть объектами, они не могут быть примитивным видом (Primitive).
let w = new WeakSet(); w.add('a'); // TypeError: Invalid value used in weak set let s = new Set(); s.add('a'); // Works
weakset-example.js
var element1 = {}; // An Object var element2 = {foo: "bar"}; var element3 = {bar: "foo"}; var myWeakSet = new WeakSet( [element1, element2] ); myWeakSet.add(element3); console.log(myWeakSet.has(element2)); // true