Set parece ser uma boa maneira de criar matrizes com elementos exclusivos garantidos, mas não expõe nenhuma boa maneira de obter propriedades, exceto o gerador [Set] .values, que é chamado de uma maneira estranha mySet.values.next()
.
Isso teria sido bom, se você pudesse chamar map
outras funções semelhantes em Sets. Mas você não pode fazer isso também.
Eu tentei Array.from
, mas parece estar convertendo apenas objetos do tipo array (NodeList e TypedArrays?) Para Array. Outra tentativa: Object.keys
não funciona para Sets, e Set.prototype não possui um método estático semelhante.
Então, a pergunta: existe algum método embutido conveniente para criar uma matriz com valores de um determinado conjunto? (A ordem do elemento realmente não importa).
se essa opção não existir, talvez haja uma única linha idiomática para fazer isso? como, usando for...of
ou similar?
var array = [v for (v of mySet)];
não funciona no chrome 46[...mySet]
.Array.from(mySet);
[...mySet]
há problemas ao compilar usando o Typescript (consulte esse problema ), portanto, é mais seguro usarArray.from(mySet)
se você pretende converter para o Typescript em um futuro próximo.via https://speakerdeck.com/anguscroll/es6-uncensored por Angus Croll
Acontece que podemos usar o
spread
operador:Ou, alternativamente, use
Array.from
:fonte
Array.from
e...
Array.from
. developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/…chrome://flags/#enable-javascript-harmony
Lembre-se de que é experimental, não pense por um momento que esta é uma boa solução para o desenvolvimento.Supondo que você esteja apenas usando
Set
temporariamente para obter valores exclusivos em uma matriz e depois convertendo-os novamente em uma matriz, tente usar o seguinte:Isso depende do uso de sublinhado ou lo-dash .
fonte
Talvez seja tarde demais para a festa, mas você pode fazer o seguinte:
Isso deve funcionar sem problemas nos navegadores que suportam o ES6 ou se você tiver um calço que polifaça corretamente a funcionalidade acima.
Edit : Hoje você pode apenas usar o que o @ c69 sugere:
fonte
set.entries()
você obterá uma matriz de pares. Você pode usarset.values()
para obter a matriz simples.var array = Array.from(set);
.entries
nem.values
. Como @Buffalo mencionado acima -Array.from(set)
é suficiente.Array.from()
não funcionava conforme o esperado. Mas agora se espalhe eArray.from()
ambos funcionam muito bem.Use o spread Operator para obter o resultado desejado
fonte
No meu caso, a solução foi:
valor1 é igual a valor2 => O valor contido na posição atual no Conjunto. O mesmo valor é passado para ambos os argumentos
Trabalhou sob o IE11.
fonte
Usar Set e convertê-lo em uma matriz é muito semelhante a copiar uma matriz ...
Portanto, você pode usar os mesmos métodos para copiar uma matriz, o que é muito fácil no ES6
Por exemplo, você pode usar
...
Imagine que você possui este conjunto abaixo:
Você pode simplesmente convertê-lo usando:
e o resultado é:
Uma matriz e agora você pode usar todos os métodos que você pode usar para uma matriz ...
Outras maneiras comuns de fazer isso:
ou usando loops como:
fonte
O código abaixo cria um conjunto a partir de uma matriz e, em seguida, usando o
...
operadorfonte
Aqui está uma maneira fácil de obter apenas valores brutos exclusivos da matriz. Se você converter a matriz em Conjunto e depois disso, faça a conversão de Conjunto em matriz. Essa conversão funciona apenas para valores brutos, para objetos na matriz não é válida. Tente você mesmo.
fonte
RESPOSTA MAIS SIMPLES
apenas espalhe o conjunto por dentro []
Resultado : [1,5]
fonte