Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
Set
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since julho de 2015.
* Some parts of this feature may have varying levels of support.
Sumário
O objetoSet permite que você armazene valoresúnicos de qualquer tipo, desdevalores primitivos a referências a objetos.
In this article
Sintaxe
new Set([iterable]);
Parâmetros
- iterable
Se umobjeto iterável é passado, todos os seus elementos serão adicionados ao novo Set. Se tal parâmetro não for específicado, ou se seu valor for
null, o novoSetestará vazio.
Descrição
ObjetosSet são coleções de valores nas quais é possível iterar os elementos em ordem de inserção. Um valor noSetpode ocorrer apenas uma vez; ele é único na coleção doSet.
Igualdade de valores
Como cada valor no Set deve ser único, a igualdade será checada e não é baseada no mesmo algoritmo que aquele usado no operador ===. Especificamente, paraSets,+0 (que é exatamente igual a - 0) e- 0 são valores diferentes. No entanto, isto foi modificado na última especificação ECMAScript 2015. Iniciado com o Gecko 29.0 (Erro do Firefox 952870) e pelorecent nightly Chrome, +0 e -0 são tratados com sendo o mesmo valor em objetos conjunto (Set). Também,NaN eundefined podem ser armazenados em um conjunto Set.
Propriedades
Set.lengthO valor da propriedade comprimento é 0.
Para contar o número de elementos de um
Set, useSet.prototype.size.get Set[@@species]A função construtora usada para criar objetos derivados.
Set.prototypeRepresenta o prototype do constructor do
Set. Permite a adição de propriedades para todos os objetos do tipoSet.
InstânciasSet
Todas as instâncias deSet herdam deSet.prototype.
Propriedades
Métodos
Exemplos
>Utilizando o objetoSet
var meuSet = new Set();meuSet.add(1); // meuSet [1]meuSet.add(5); // meuSet [1, 5]meuSet.add(5); // 5 já foi adicionando, portanto, meuSet [1, 5]meuSet.add("texto");var o = { a: 1, b: 2 };meuSet.add(o);meuSet.add({ a: 1, b: 2 }); // o está referenciando outro objetomeuSet.has(1); // truemeuSet.has(3); // false, 3 não foi adicionado ao set (Conjunto)meuSet.has(5); // truemeuSet.has(Math.sqrt(25)); // truemeuSet.has("Texto".toLowerCase()); // truemeuSet.has(o); // truemeuSet.size; // 5meuSet.delete(5); // remove 5 do setmeuSet.has(5); // false, 5 já foi removidomeuSet.size; // 4, nós simplesmente removemos um valorconsole.log(meuSet); // Set { 1, 'texto', { a: 1, b: 2 }, { a: 1, b: 2 } }Iterando objetosSet
// iterar sobre os itens em set// loga os itens na ordem: 1, "texto"for (let item of meuSet) console.log(item);// loga os itens na ordem: 1, "texto"for (let item of meuSet.keys()) console.log(item);// loga os itens na ordem: 1, "texto"for (let item of meuSet.values()) console.log(item);// loga os itens na ordem: 1, "texto"//(key e value são os mesmos aqui)for (let [key, value] of meuSet.entries()) console.log(key);// converte Set para um Arrayvar meuArr = [v for (v of mySet)]; // [1, "some text"]// o seguinte também funcionará se for executado em um documento HTMLmySet.add(document.body);mySet.has(document.querySelector("body")); // true// a conversão entre Set e ArraymySet2 = Set([1,2,3,4]);mySet2.size; // 4[...mySet2]; // [1,2,3,4]// intersecção pode ser simulado viavar intersection = new Set([...set1].filter(x => set2.has(x)));// Iterar entradas set com forEachmeuSet.forEach(function(value) { console.log(value);});// 1// 2// 3// 4Implementando operações básicas entre conjuntos
function isSuperset(set, subset) { for (var elem of subset) { if (!set.has(elem)) { return false; } } return true;}function uniao(setA, setB) { var _uniao = new Set(setA); for (var elem of setB) { _uniao.add(elem); } return _uniao;}function interseccao(setA, setB) { var _interseccao = new Set(); for (var elem of setB) { if (setA.has(elem)) { _interseccao.add(elem); } } return _interseccao;}function diferencaSimetrica(setA, setB) { var _diferenca = new Set(setA); for (var elem of setB) { if (_diferenca.has(elem)) { _diferenca.delete(elem); } else { _diferenca.add(elem); } } return _diferenca;}function diferenca(setA, setB) { var _diferenca = new Set(setA); for (var elem of setB) { _diferenca.delete(elem); } return _diferenca;}//Exemplosvar setA = new Set([1, 2, 3, 4]), setB = new Set([2, 3]), setC = new Set([3, 4, 5, 6]);isSuperset(setA, setB); // => trueuniao(setA, setC); // => Set [1, 2, 3, 4, 5, 6]interseccao(setA, setC); // => Set [3, 4]diferencaSimetrica(setA, setC); // => Set [1, 2, 5, 6]diferenca(setA, setC); // => Set [1, 2]Relação com objetosArray
var myArray = ["value1", "value2", "value3"];// Use o construtor regular de Set para transformar um array dentro de um Setvar mySet = new Set(myArray);mySet.has("value1"); // retorna true// Use o operador de propagação para transformar um Set em um Array.alert(uneval([...mySet])); // Irá mostrar-lhe exatamente o mesmo Array como myArrayRemovendo elementos duplicados de umArray
// Use para remover elementos duplicados de um Arrayconst numeros = [2, 3, 4, 4, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 5, 32, 3, 4, 5];console.log([...new Set(numeros)]);// [2, 3, 4, 5, 6, 7, 32]Relação com objetosString
var texto = "India";var meuSet = new Set(texto); // Set ['I', 'n', 'd', 'i', 'a']meuSet.size; // 5Especificações
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-set-objects> |