Conjuntos Set - JavaScript
Conjuntos em JavaScript são estruturas de dados que armazenam valores únicos. Para definir um conjunto, utilizamos o objeto Set
const mySet = new Set();
Também é possível inicializar um conjunto com um array de valores:
const arr = [1, 1, 2, 3, 4, 5, 2, 4];
const numbers = new Set(arr);
console.log(numbers); // Set(5) {1, 2, 3, 4, 5}
Neste caso, os dados do array são passados para o conjunto, mas como ele armazena apenas valores únicos, os valores repetidos são automaticamente removidos.
Para simplificar, podemos passar um array diretamente para o construtor do Set
const numbers = new Set([1, 2, 3, 4, 5]);
console.log(numbers); // Set(5) {1, 2, 3, 4, 5}
Tamanho do conjunto
Para verificar o número de elementos em um conjunto, utilizamos a propriedade size
const numbers = new Set([1, 1, 2, 3, 4, 5, 2, 4]);
console.log(numbers.size); // 5
Adicionando elementos
Para adicionar elementos, usamos o método add()
const numbers = new Set();
numbers.add(1);
numbers.add(3);
numbers.add(5);
numbers.add(3); // não é adicionado
numbers.add(1); // não é adicionado
console.log(numbers); // Set(3) {1, 3, 5}
Como um conjunto armazena apenas valores únicos, adicionar um elemento já presente nele é ineficaz.
O método add retorna uma referência ao próprio conjunto, permitindo o encadeamento de métodos:
const numbers = new Set();
numbers.add(1).add(3).add(5);
console.log(numbers); // Set(3) {1, 3, 5}
Remoção de elementos
Para remover elementos, usamos o método delete()
const numbers = new Set([1, 3, 5]);
numbers.delete(3);
console.log(numbers); // Set(2) {1, 5}
Este método retorna um valor booleano: true
false
const numbers = new Set([1, 3, 5]);
let isDeleted = numbers.delete(3);
console.log(isDeleted); // true
isDeleted = numbers.delete(54);
console.log(isDeleted); // false
Para remover todos os elementos de um conjunto, usamos o método clear()
let numbers = new Set([1, 3, 5]);
numbers.clear();
console.log(numbers); // Set(0) {}
Verificação de presença de um elemento
Para verificar a presença de um elemento no conjunto, utilizamos o método has()
const numbers = new Set([1, 3, 5]);
console.log(numbers.has(3)); // true
console.log(numbers.has(32)); // false
Iteração sobre conjuntos
Para iterar sobre os elementos de um conjunto, utilizamos o método forEach()
const numbers = new Set([1, 2, 3, 5]);
numbers.forEach(function(value1, value2, set) {
console.log(value1);
})
Semelhante ao método forEach()
Também podemos usar o laço for
of
const numbers = new Set([1, 2, 3, 5]);
for(let n of numbers) {
console.log(n);
}
Obtendo iteradores
O objeto Set possui métodos que retornam um iterador, especificamente o objeto SetIterator
values()
keys(),
entries()
const numbers = new Set([1, 2, 3, 5]);
console.log(numbers.values()); // SetIterator {1, 2, 3, 5}
console.log(numbers.keys()); // SetIterator {1, 2, 3, 5}
console.log(numbers.entries()); // SetIterator {1 => 1, 2 => 2, 3 => 3, 5 => 5}
O método values()
keys()
values()
entries()
Os iteradores retornados podem ser usados para acessar os elementos do conjunto:
const people = new Set(["Tom", "Bob", "Sam"]);
const iterator = people.values();
console.log(iterator.next()); // {value: "Tom", done: false}
console.log(iterator.next()); // {value: "Bob", done: false}
console.log(iterator.next()); // {value: "Sam", done: false}
console.log(iterator.next()); // {value: undefined, done: true}
Remoção de elementos duplicados de um array
As propriedades exclusivas de um objeto Set
const peopleArray = ["Tom", "Bob", "Sam", "Alice", "Sam", "Kate", "Tom"];
const peopleSet = new Set(peopleArray);
const newPeopleArray = Array.from(peopleSet);
console.log(newPeopleArray); // ["Tom", "Bob", "Sam", "Alice", "Kate"]
A função Array.from()