web-dev-qa-db-fra.com

Comment convertir les clés de la carte en tableau?

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?

143
Lilleman

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"]
_
284
pawel

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)
9
Fernando Carvajal

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"]
1
Tkoma

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);
1
Joman68

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');
1
linfluX

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()];
0
Alireza