Digamos que eu tenho o seguinte mapa:
let myMap = new Map().set('a', 1).set('b', 2);
E eu quero obter ['a', 'b'] com base no acima. Minha solução atual parece tão longa e horrível.
let myMap = new Map().set('a', 1).set('b', 2);
let keys = [];
for (let key of myMap)
keys.push(key);
console.log(keys);
Deve haver uma maneira melhor, não?
javascript
dictionary
ecmascript-6
Lilleman
fonte
fonte
Array.from(Map.keys())
.Map
.Array.from(Map.values())
- se for o caso, você precisa de valores, em vez de chaves.Respostas:
Map.keys()
retorna umMapIterator
objeto que pode ser convertidoArray
usandoArray.from
:EDIT: você também pode converter objetos iteráveis em array usando a sintaxe de propagação
fonte
this.map.values().slice is not a function
. Talvez eu deva atualizar.slice()
chamada está sendo executada antes do operador de propagação. Tente[ ... Array.from(map.values()).slice(0) ]
const fooMap = new Map<number, string>(); const fooArray = [...fooMap.keys()];
o seguinte: TS2461: O tipo 'IterableIterator <número>' não é um tipo de matriz. Portanto, isso não é permitido no TypeScript. Array.from funciona conforme o esperado...."abc"
para entrar["a","b","c"]
no ES6, o que não é possível no TS...."abc"
nem...("abc")
está trabalhando no console do Chrome, que suporta o ES6?Você pode usar o operador spread para converter o iterador Map.keys () em uma matriz.
fonte
Array.from(myMap.keys())
não funciona nos scripts de aplicativos do google.Tentar usá-lo resulta no erro
TypeError: Cannot find function from in object function Array() { [native code for Array.Array, arity=1] }
.Para obter uma lista de chaves no GAS, faça o seguinte:
fonte
map.keys()
valor de retorno não é iterável.Preciso de algo semelhante à forma reativa angular:
fonte
Não é exatamente a melhor resposta para a pergunta, mas esse truque
new Array(...someMap)
me salvou algumas vezes quando eu preciso de chave e valor para gerar a matriz necessária. Por exemplo, quando é necessário criar componentes de reação do objeto Map com base nos valores de chave e valor.fonte
OK, vamos ser um pouco mais abrangentes e começar com o que é o mapa para quem não conhece esse recurso em JavaScript ... MDN diz:
Como você mencionou, você pode criar facilmente uma instância do Map usando a nova palavra-chave ... No seu caso:
Então vamos ver ...
A maneira como você mencionou é uma boa maneira de fazer isso, mas sim, existem maneiras mais concisas de fazer isso ...
O mapa tem muitos métodos que você pode usar, como os
set()
que você já usou para atribuir os valores-chave ...Uma delas é
keys()
que retorna todas as chaves ...No seu caso, ele retornará:
e você os converte facilmente em uma matriz usando maneiras ES6 , como operador de propagação ...
fonte