Узнайте, как и когда использовать Set
в JavaScript.
Объект Set
позволяет вам создать коллекцию из unique values
(каждое значение может встречаться только один раз).
Set
может содержать любой тип значения (примитивы или ссылку на объект).
Set
хранит элементы в insertion order
.
Set
не содержит ключей 🔑, как объект Карта.
Уникальность элементов Set
проверяется с помощью алгоритма SameValueZero
. Этот алгоритм похож на ===
(строгое равенство), за исключением одного случая, когда NaN === NaN
оценивается как истина, так что несколько NaN
не вставляются в Set
.
Создание Set
Синтаксис: new Set([iterable])
→ возвращает объект Set
.
var set1 = new Set([1, 2, 1, 3, 4, 5]); set1; // Set(5) {1, 2, 3, 4, 5} ; duplicate values are removed. Creating an empty set var set2 = new Set();
Свойства
size
→ Возвращает количество элементов в Set
var number = new Set([1,2,3,4,5]) number.size ;
Методы
add()
Метод add()
добавляет переданный элемент в конец объекта Set
и возвращает объект Set
.
var fruits = new Set(['🍇', '🍉', '🍊', '🍈' ]); fruits.add('🍋'); fruits; // Set(5) {'🍇', '🍉', '🍊', '🍈', '🍋'};
Когда мы пытаемся добавить повторяющиеся значения, они не вставляются.
fruits.add('🍊'); // already present in the set fruits; // Set(5) {'🍇', '🍉', '🍊', '🍈', '🍋'};
Метод add
может быть связан с цепочкой
fruits .add('🍌') .add('🍓') .add('🍎'); fruits; // Set(8) {"🍇", "🍉", "🍊", "🍈", "🍋", …}
Добавление объектов в Set
var set = new Set(); set.add({i : 10}); set.add({i : 10}); set; //Set(2) {{…}, {…}} // Even-though objects look same, each object has different reference, so they are not === // An object reference means that it compares the memory address of the object and not the actual key/value pairs contained in the object. -------------------------------------------------------------------- var obj = {i :100}; set.add(obj); set.add(obj); // Now the obj points to same object reference so it is not inserted -------------------------------------------------------------------- obj.i =1000; // the value in the set is changed because we are storing the address.
has()
Метод has()
возвращает true
, если элемент с указанным значением существует в объекте Set
, и false
, если значение отсутствует в Set
.
Синтаксис: has(valueToBeChecked)
→ возвращает истину или ложь.
var fruits = new Set(['🍇', '🍉', '🍊', '🍈' ]); fruits.has('🍇'); //true fruits.has('🍌'); //false
has
метод с объектом
var set = new Set(); var obj = {i :100}; set.add(obj); set.has(obj); // true set.has({i : 100}); //false, because they are different object reference.
values()
Метод values()
возвращает новый объект Iterator
, который содержит значения для каждого элемента в объекте Set
в порядке вставки.
var fruits = new Set(['🍇', '🍉', '🍊', '🍈' ]); fruits.values(); // SetIterator {"🍇", "🍉", "🍊", "🍈", "🍋", …} -------------------------------------------------------------------- //use destructor to print only the values console.log(...fruits.values()) or var fruitsArray = ([...fruits.values]);
entries()
Метод entries()
возвращает новый объект Iterator
, содержащий массив [value, value]
в порядке вставки.
В Set
нет ключа, поэтому он возвращается в формате [value, value]
.
var fruits = new Set(['🍇', '🍉']); fruits.entries(); SetIterator {"🍇" => "🍇", "🍉" => "🍉"} -------------------------------------------------------------------- // you can use for...of for(var [key ,value] of fruits.entries()) { console.log(key, value); }
delete()
Метод delete()
удаляет указанный элемент из объекта Set
.
Синтаксис: delete(valueToBeDeleted)
Возвращает true
, если элемент в Set
удален, в противном случае возвращает false
.
var fruits = new Set(['🍇', '🍉']); fruits.delete('🍇'); //true fruits; //Set(1) {"🍉"} fruits.delete('🍌'); false.
clear()
Метод clear()
очищает объектSet
.
var fruits = new Set(['🍇', '🍉']); fruits.size; // 2 fruits.clear(); fruits.size; // 0
Использование forEach
для объекта Set
:
let print= function(key , value, set) { console.log(value); } var fruits = new Set(['🍇', '🍉']); fruits.forEach(print) //output 🍇 🍉
Секреты и уловки
- Когда мы передаем строку в качестве аргумента при создании
Set
, тогда создается набор, в котором все символы являются отдельными элементами.
var text = 'LEARN'; var mySet = new Set(text); //Set(5) {"L", "E", "A", "R", "N"}
2. Удаление повторяющихся элементов из массива
var names= [ 'John', 'Brandi', 'Tony', 'John']; var uniqueNames = [...new Set(names)] uniqueNames = [ 'John', 'Brandi', 'Tony'];
3. Чем отличаются массив и набор
Set
объекты хранят уникальные значения, тогда как массив может иметь повторяющиеся значения- В массиве нам нужно использовать метод
indexOf
, чтобы проверить доступность элемента в массиве, но в наборе мы можем использовать методhas
, который по сравнению с методомindexOf
.
- Значение
NaN
не может быть найдено сindexOf
в массиве. Set
объекты позволяют удалять элементы по их значению. С массивом вам нужно будет выполнить стыковку на основе индекса элемента.
Подробнее о карте 🗺 можно прочитать здесь.
Если вы найдете этот полезный сюрприз, то я здесь.
Поделитесь, если вы счастливы 😃 😆 🙂.
Подпишитесь на Javascript Jeep🚙, если чувствуете себя достойным.