--- title: Set slug: Web/JavaScript/Reference/Global_Objects/Set tags: - ECMAScript 2015 - JavaScript - Objetos - Objetos Globais - conjuntos translation_of: Web/JavaScript/Reference/Global_Objects/Set ---
O objeto Set
permite que você armazene valores únicos de qualquer tipo, desde {{Glossary("Primitive", "valores primitivos")}} a referências a objetos.
new Set([iterable]);
null
, o novo Set
estará vazio.Objetos Set
são coleções de valores nas quais é possível iterar os elementos em ordem de inserção. Um valor no Set
pode ocorrer apenas uma vez; ele é único na coleção do Set
.
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, para Set
s, +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 {{geckoRelease("29")}} ({{bug("952870")}}) e pelo recent nightly Chrome, +0 e -0 são tratados com sendo o mesmo valor em objetos conjunto (Set). Também, NaN
e undefined
podem ser armazenados em um conjunto Set.
Set.length
Set
, use {{jsxref("Set.prototype.size")}}.Set
. Permite a adição de propriedades para todos os objetos do tipo Set
.Set
Todas as instâncias de Set
herdam de {{jsxref("Set.prototype")}}.
{{page('pt-BR/Web/JavaScript/Reference/Global_Objects/Set/prototype','Properties')}}
{{page('pt-BR/Web/JavaScript/Reference/Global_Objects/Set/prototype','Methods')}}
Set
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 objeto meuSet.has(1); // true meuSet.has(3); // false, 3 não foi adicionado ao set (Conjunto) meuSet.has(5); // true meuSet.has(Math.sqrt(25)); // true meuSet.has("Texto".toLowerCase()); // true meuSet.has(o); // true meuSet.size; // 5 meuSet.delete(5); // remove 5 do set meuSet.has(5); // false, 5 já foi removido meuSet.size; // 4, nós simplesmente removemos um valor console.log(meuSet) // Set { 1, 'texto', { a: 1, b: 2 }, { a: 1, b: 2 } }
Set
// 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 Array var meuArr = [v for (v of mySet)]; // [1, "some text"] // o seguinte também funcionará se for executado em um documento HTML mySet.add(document.body); mySet.has(document.querySelector("body")); // true // a conversão entre Set e Array mySet2 = Set([1,2,3,4]); mySet2.size; // 4 [...mySet2]; // [1,2,3,4] // intersecção pode ser simulado via var intersection = new Set([...set1].filter(x => set2.has(x))); // Iterar entradas set com forEach meuSet.forEach(function(value) { console.log(value); }); // 1 // 2 // 3 // 4
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;
}
//Exemplos
var setA = new Set([1, 2, 3, 4]),
setB = new Set([2, 3]),
setC = new Set([3, 4, 5, 6]);
isSuperset(setA, setB); // => true
uniao(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]
Array
var myArray = ["value1", "value2", "value3"]; // Use o construtor regular de Set para transformar um array dentro de um Set var 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 myArray
Array
// Use para remover elementos duplicados de um Array
const 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]
String
var texto = 'India';
var meuSet = new Set(texto); // Set ['I', 'n', 'd', 'i', 'a']
meuSet.size; // 5
Especificação | Status | Comentário |
---|---|---|
{{SpecName('ES2015', '#sec-set-objects', 'Set')}} | {{Spec2('ES2015')}} | Definição inicial. |
{{SpecName('ESDraft', '#sec-set-objects', 'Set')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.builtins.Set")}}