MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-dev-survey

Esta tradução está incompleta. Por favor, ajude a traduzir este artigo.

This is a new technology, part of the ECMAScript 2015 (ES6) standard.
This technology's specification has been finalized, but check the compatibility table for usage and implementation status in various browsers.

Sumário

O objeto Set permite que você armazene valores únicos de qualquer tipo, desde valores primitivos a referências a objetos.

Sintaxe

 new Set([iterable]);

Parâmetros

iterable
Se um objeto iterável é passado, todos os seus elementos serão adicionados ao novo Set.

Descrição

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.

Igualdade de valores

Como cada valor no Set deve ser único, a igualidade será checada e não é baseada no mesmo algoritmo que aquele usado no operador ===. Especificamente, para Sets, +0 (que é exatamente igual a - 0) e - 0 são valores diferentes. No entanto, isto tem sido modificado na última especificação ECAMScript 6. Iniciado com o Gecko 29.0 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) (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.

Propriedades

Set.length
O valor da propriedade comprimento é 1.
Set.prototype
Representa o construtor prototype do conjunto Set. Permite a adição de propriedades para todos os objetos do tipo Set.

Instâncias Set 

Todas as instâncias de Set herdam de Set.prototype.

Propriedades

Set.prototype.constructor
Returns the function that created an instance's prototype. This is the Set function by default.
Set.prototype.size
Returns the number of values in the Set object.

Métodos

Set.prototype.add(value)
Appends a new element with the given value to the Set object. Returns the Set object.
Set.prototype.clear()
Removes all elements from the Set object.
Set.prototype.delete(value)
Removes the element associated to the value and returns the value that Set.prototype.has(value) would have previously returned. Set.prototype.has(value) will return false afterwards.
Set.prototype.entries()
Returns a new Iterator object that contains an array of [value, value] for each element in the Set object, in insertion order. This is kept similar to the Map object, so that each entry has the same value for its key and value here.
Set.prototype.forEach(callbackFn[, thisArg])
Calls callbackFn once for each value present in the Set object, in insertion order. If a thisArg parameter is provided to forEach, it will be used as the this value for each callback.
Set.prototype.has(value)
Returns a boolean asserting whether an element is present with the given value in the Set object or not.
Set.prototype.keys()
Is the same function as the values() function and returns a new Iterator object that contains the values for each element in the Set object in insertion order.
Set.prototype.values()
Returns a new Iterator object that contains the values for each element in the Set object in insertion order.
Set.prototype[@@iterator]()
Returns a new Iterator object that contains the values for each element in the Set object in insertion order.

Exemplos

Exemplo: Utilizando o objeto Set

var mySet = new Set();

mySet.add(1);
mySet.add(5);
mySet.add("some text");

mySet.has(1); // true
mySet.has(3); // false, 3 não foi adicionado ao set (Conjunto)
mySet.has(5);              // true
mySet.has(Math.sqrt(25));  // true
mySet.has("Some Text".toLowerCase()); // true

mySet.size; // 3

mySet.delete(5); // remove 5 do set
mySet.has(5);    // false, 5 já foi removido

mySet.size; // 2, nós simplesmente removemos um valor

Exemplo: Iterando Sets

// iterar sobre os itens em set
// loga os itens na ordem: 1, "some text" 
for (let item of mySet) console.log(item);

// loga os itens na ordem: 1, "some text" 
for (let item of mySet.keys()) console.log(item);
 
// loga os itens na ordem: 1, "some text" 
for (let item of mySet.values()) console.log(item);

// loga os itens na ordem: 1, "some text" 
//(key e value são os mesmos aqui)
for (let [key, value] of mySet.entries()) console.log(key);

// converte set para um Array
var myArr = [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([x for (x of set1) if (set2.has(x))]);

// Iterar entradas set com forEach
mySet.forEach(function(value) {
  console.log(value);
});

// 1
// 2
// 3
// 4

Exemple: Relação com objetos 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

Especificações

Especificação Status Cometário
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Set' in that specification.
Standard Definição inicial.

Compatibilidade de navegador (Browser)

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Suporte Básico

31 [1]
38

13 (13) 11 Não suportado Não suportado
iterable Não suportado 17 (17) Não suportado Não suportado Não suportado
Set.clear() 31 [1]
38
19 (19) 11 Não suportado Não suportado
Set.keys(), Set.values(), Set.entries() 37 [1]
38
24 (24) Não suportado Não suportado Não suportado
Set.forEach() 36 [1]
38
25 (25) 11 Não suportado Não suportado
Value equality for -0, +0 and 0 34 [1]
38
29 (29) Não suportado Não suportado Não suportado
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support Não suportado 31 [1]
38
13.0 (13) Não suportado Não suportado Não suportado
iterable Não suportado Não suportado 17.0 (17) Não suportado Não suportado Não suportado
Set.clear() Não suportado 31 [1]
38
19.0 (19) Não suportado Não suportado Não suportado
Set.keys(), Set.values(), Set.entries() Não suportado 37 [1]
38
24.0 (24) Não suportado Não suportado Não suportado
Set.forEach() Não suportado 36 [1]
38
25.0 (25) Não suportado Não suportado Não suportado
Value equality for -0, +0 and 0 Não suportado 34 [1]
38
29.0 (29) Não suportado Não suportado Não suportado

[1] O recurso está disponível por trás de uma preferência. Em chrome://flags, activate the entry “Enable Experimental JavaScript”.

Veja também

Etiquetas do documento e colaboradores

 Colaboradores desta página: Davidpsjunior, EdJr
 Última atualização por: Davidpsjunior,