1. ホーム
  2. javascript

[解決済み] イテレータでmap()を使用する

2022-07-23 20:54:39

質問

ある地図があるとする。 let m = new Map(); を使って m.values() はマップイテレータを返します。

しかし、私は forEach() または map() のような関数が提供されているので、そのイテレータでwhileループを実装するのはアンチパターンのように思われます。 map() .

では map() をイテレータ上で使う方法はあるのでしょうか?

どのように解決するのですか?

この 最もシンプルな 最も低いパフォーマンス という方法があります。

Array.from(m).map(([key,value]) => /* whatever */)

まだまし

Array.from(m, ([key, value]) => /* whatever */))

Array.from は、任意の反復処理や配列に似たものを受け取り、それを配列に変換します! Danielがコメントで指摘しているように、変換にマッピング関数を追加することで、反復を削除し、その後、中間配列を削除することができます。

を使って Array.from を使うと、パフォーマンスが O(1) から O(n) をコメントで@hrabanさんが指摘されています。このため mMap であり、それらは無限にはなり得ないので、無限列を心配する必要はない。ほとんどの場合、これで十分でしょう。

マップをループする他の方法がいくつかあります。

使用方法 forEach

m.forEach((value,key) => /* stuff */ )

使用方法 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