El le plus simple y le moins performant La façon de faire est la suivante :
Array.from(m).map(([key,value]) => /* whatever */)
Mieux encore
Array.from(m, ([key, value]) => /* whatever */))
Array.from
prend n'importe quel itérable ou objet similaire à un tableau et le convertit en un tableau ! Comme Daniel le fait remarquer dans les commentaires, nous pouvons ajouter une fonction de mappage à la conversion pour supprimer une itération et, par la suite, un tableau intermédiaire.
Utilisation de Array.from
fera passer vos performances de O(1)
a O(n)
comme le souligne @hraban dans les commentaires. Depuis m
est un Map
et ils ne peuvent pas être infinis, nous n'avons pas à nous soucier d'une séquence infinie. Dans la plupart des cas, cela suffira.
Il existe plusieurs autres façons de parcourir une carte en boucle.
Utilisation de forEach
m.forEach((value,key) => /* stuff */ )
Utilisation de for..of
var myMap = new Map();
myMap.set(0, 'zero');
myMap.set(1, 'one');
for (var [key, value] of myMap) {
console.log(key + ' = ' + value);
}
// 0 = zero
// 1 = one
0 votes
Pas dans la boîte, mais vous pouvez utiliser des bibliothèques tierces telles que
lodash
map
qui prend également en charge la fonction Map.0 votes
La carte elle-même possède un forEach pour itérer sur ses paires clé-valeur.
0 votes
Convertir l'itérateur en tableau et le mapper comme suit
Array.from(m.values()).map(...)
fonctionne, mais je pense que ce n'est pas la meilleure façon de faire.0 votes
Quel est le problème que vous souhaitez résoudre en utilisant un itérateur alors qu'un tableau conviendrait mieux pour l'utiliser
Array#map
?1 votes
@NinaScholz J'utilise un ensemble général comme ici : stackoverflow.com/a/29783624/4279201
0 votes
iter-ops vous permet de faire
map
et de nombreuses autres opérations sur n'importe quel itérateur.