Disons que j'ai la carte suivante:
let myMap = new Map().set('a', 1).set('b', 2);
Et je veux obtenir ['a', 'b'] sur la base de ce qui précède. Ma solution actuelle semble si longue et si horrible.
let myMap = new Map().set('a', 1).set('b', 2);
let keys = [];
for (let key of myMap)
keys.Push(key);
console.log(keys);
Il doit y avoir un meilleur moyen, non?
Map.keys()
renvoie un objet MapIterator
pouvant être converti en Array
à l'aide de Array.from
:
_let keys = Array.from( myMap.keys() );
// ["a", "b"]
_
EDIT: vous pouvez aussi convertir un objet itérable en tableau en utilisant syntaxe spread
_let keys =[ ...myMap.keys() ];
// ["a", "b"]
_
Vous pouvez utiliser l'opérateur spread pour convertir un itérateur Map.keys () dans un tableau.
let myMap = new Map().set('a', 1).set('b', 2).set(983, true)
let keys = [...myMap.keys()]
console.log(keys)
Pas vraiment la meilleure réponse à la question, mais cette astuce new Array(...someMap)
m’a sauvé plusieurs fois lorsque j’ai besoin de la clé et de la valeur pour générer le tableau requis. Par exemple, lorsqu'il est nécessaire de créer des composants de réaction à partir d'un objet Map basé sur des valeurs de clé et de valeur.
let map = new Map();
map.set("1", 1);
map.set("2", 2);
console.log(new Array(...map).map(pairs => pairs[0])); -> ["1", "2"]
Array.from(Map.keys())
ne fonctionne pas dans les scripts d'application Google.
Si vous essayez de l'utiliser, l'erreur TypeError: Cannot find function from in object function Array() { [native code for Array.Array, arity=1] }
.
Pour obtenir une liste de clés dans GAS, procédez comme suit:
var keysList = Object.keys(myMap);
J'ai besoin de quelque chose de similaire avec angular forme réactive:
let myMap = new Map().set(0, {status: 'VALID'}).set(1, {status: 'INVALID'});
let mapToArray = Array.from(myMap.values());
let isValid = mapToArray.every(x => x.status === 'VALID');
OK, allons un peu plus complet et commençons par ce qui est Carte pour ceux qui ne connaissent pas cette fonctionnalité en JavaScript ... MDN dit:
L'objet Map contient les paires clé-valeur et mémorise l'ordre d'insertion d'origine des clés.
Toute valeur (à la fois des objets et des valeurs primitives) peut être utilisée comme clé ou comme valeur.
Comme vous l'avez mentionné, vous pouvez facilement créer une instance de Map en utilisant un nouveau mot clé ... Dans votre cas:
let myMap = new Map().set('a', 1).set('b', 2);
Alors voyons ...
La façon dont vous avez mentionné est une manière acceptable de le faire, mais oui, il existe des façons plus concises de le faire ...
Map a beaucoup de méthodes que vous pouvez utiliser, comme set()
que vous avez déjà utilisé pour assigner les valeurs de clé ...
L'un d'eux est keys()
qui renvoie toutes les clés ...
Dans votre cas, il retournera:
MapIterator {"a", "b"}
et vous les convertissez facilement en un tableau en utilisant ES6, comme un opérateur de propagation ...
const b = [...myMap.keys()];