A Установить В JavaScript – это абстрактный тип данных, который хранит уникальные элементы. Наборы упорядочены, а это означает, что они могут быть имерными в порядке, когда они были вставлены.
Строительство
Набор может быть инициализирован без аргументов …
const a = new Set();
console.log(a); // Set {}
… Или же с итерабильный объект
const b = new Set([1, 2, 3, 4, 3, 2, '4']); // Set {1, 2, 3, 4, '4'}
const c = new Set('Mississippi'); // Set {'M', 'i', 's', 'p'}
Несколько вещей, которые нужно помнить:
- Наш набор
Cимеет только 4 элемента, потому что наборы не хранят дубликаты. - Типы не принуждаются при добавлении значений, поэтому 4 и «4» разные.
Вставка элементов
Чтобы вставить элемент, Установить имеет метод на своем прототипе под названием Добавить Анкет Значение, которое мы хотели бы добавить, передается в метод в качестве аргумента, и обновленный набор возвращается.
const set1 = new Set([1, 2, 3, 4, 5]); // Set {1, 2, 3, 4, 5}
set1.add('hello world'); // Set {1, 2, 3, 4, 5, 'hello world'}
set1.add([true, false]); // Set {1, 2, 3, 4, 5, 'hello world', [true, false]}
Если мы не передаем аргумент в пользу Добавить Метод, неопределенное Вход будет вставлен в набор.
const set2 = new Set(); // Set {}
set1.add(4); // Set {4}
set1.add(); // Set {4, undefined}
С тех пор, как Добавить Метод возвращает обновленный набор, их можно приковать вместе.
const set3 = new Set();
set3
.add(2) // Set {2}
.add(4) // Set {2, 4}
.add(6) // Set {2, 4, 6}
.add(8); // Set {2, 4, 6, 8}
Удаление элементов
Чтобы удалить элемент из набора, мы используем Удалить метод Мы передаем элемент, который мы хотели бы удалить на метод, и возвращается логическое значение. Если элемент найден в наборе, он будет удален и вернет истинный . Если нет, это вернется ложный Анкет
const set4 = new Set('abcde'); // Set {'a', 'b', 'c', 'd', 'e'}
set4.delete('a'); // true
set4.delete('x'); // false
console.log(set4); // Set {'b', 'c', 'd', 'e'}
Другие методы
У Set есть несколько других методов на своем прототипе, поэтому давайте посмотрим на некоторые из них.
Set.prototype.clear ()
ясно Метод удаляет все записи из данного набора.
const setA = new Set();
setA
.add(1)
.add(3)
.add(5); // Set {1, 3, 5}
setA.clear();
console.log(setA); // Set {}
Set.prototype.has (val)
имеет Метод возвращает логическое значение, утверждая, существует ли принятый аргумент в наборе или нет.
const setB = new Set([true, false, 1, 2, 3]); // Set {true, false, 1, 2, 3}
setB.has(false); // true
setB.has(true); // true
setB.has('a'); // false
Set.prototype.foreach ()
foreach Метод выполняет Функция обратного вызова для каждого значения в наборе.
Функция обеспечивается тремя параметрами: ключ, значение и текущий объект SET. Для наборов ключ и значение будут такими же.
const setC = new Set([1, 2, 3]);
const printValue = (key, val, self) => {
console.log(key, val);
};
setC.forEach(printValue);
// 1 1
// 2 2
// 3 3
Удаление дубликатов из массива с набором
Были времена, когда я хотел удалить дубликаты из массива. Моя первоначальная реализация состояла в том, чтобы использовать фильтр Анкет В этом решении я называю Indexof Метод массива на каждом значении. Если Indexof Не возвращает текущий индекс, значение будет отфильтрован.
const array = [1, 2, 3, 1, 1, 1];
const filteredArray = array.filter((value, index) => {
return array.indexOf(value) === index;
});
console.log(filteredArray); // [1, 2, 3]
Но … поскольку наборы не хранят дублирующиеся значения, мы можем использовать эту функциональность. Давайте передадим массив в качестве аргумента нашему набору конструктору.
const mySet = new Set(array); // Set {1, 2, 3}
Теперь у нас есть набор с различными значениями. Используя Распространение оператора , мы можем расширить наши установленные значения и хранить их в новом массиве.
const filteredArr = [...mySet]; console.log(filteredArr); // [1, 2, 3]
И вуаля … массив удален из его дубликатов.
Эта статья только царапает поверхность того, что мы можем сделать с наборами, но это должно создать хорошую основу. Я не могу дождаться, чтобы увидеть, что вы строите.
Оригинал: “https://dev.to/khalalw/let-s-talk-about-sets-baby-k79”