1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

魔法JS☆あれい 最終話「flatの、最高のflatMap」

Posted at

登場人物

丹生(にゅう)あれい
魔法少女「魔法(マジカル)JS(女子小学生)☆あれい」として活動中。

イテレー太
正体不明の魔法生物。

第1部「ミューテーター・メソッド編」

第2部「アクセサ・メソッド編」

第3部「イテレーション・メソッド編」

flat()

イテレー太「早いもので、今回でついに最終話だよ……」
あれい「短い付き合いだったな駄犬」
イ「だけど、戦いはまだ続いてるよ! 召喚したデータは第8話を参照してね!」
あ「おう」
イ「そして、最後の敵の弱点は、『記事で使われているすべてのタグ(tags)の一覧』だよ! さあ、タグの一覧をreturnして敵を倒してよ!」
あ「最後まで面倒くせえなあ……」

return items.map(item => item.tags).flat();

あ「これでいいのか」
イ「さすがあれい、最後まで頑なに盛り上がりポイントを作らなかったね! そして解説をお願い!」
あ「面倒くせえなあ……map() メソッドですべての記事にアクセスして、tagsの値を取得している。ただし、そのままだと……」

[
  [
    { name: 'JavaScript', versions: [] },
  ],
  [
    { name: 'JavaScript', versions: [] },
  ],
  ...
]

あ「このように階層化(ネスト)された配列が出来上がるので、flat() メソッドで配列をフラットにしているわけだ。その結果……」

[
  { name: 'JavaScript', versions: [] },
  { name: 'JavaScript', versions: [] },
  ...
]

あ「こういう配列が完成する」
イ「!!! 最終話にして、あれいが積極的に解説してるよ! 僕は感涙を禁じ得ないよ!」
あ「やかましい」

解説

flat() メソッドは、すべてのサブ配列の要素を指定した深さで再帰的に結合した新しい配列を生成します。

MDNより)

flat()メソッドは、階層化(ネスト)された配列をフラット化するメソッドです。
なお、「フラット化する階層の深さ」を引数に指定することができます。既定値は1です。

flatMap()

あ「ちなみに、さっきのはflatMap()を使うとさらに簡単に記述できるぞ」

return items.flatMap(item => item.tags);

イ「あ、あれいの様子が今までと違うよ! 僕の知らないうちに世界が再構築されたんだろうか!?」
あ「うるせえしばくぞ」

解説

flatMap() メソッドは、最初にマッピング関数を使用してそれぞれの要素をマップした後、結果を新しい配列内にフラット化します。これは深さ 1 の flat が続く map と同じですが、flatMap はしばしば有用であり、2 つのメソッドを 1 つにマージするよりもやや効果的です。

MDNより)

まさに名前の通りflat()map()なメソッドです。配列内のすべての要素にmap()メソッドと同様にコールバック関数を実行し、その結果をフラット化した配列にして返します。

エピローグ

……というわけで、魔法(マジカル)JS(女子小学生)☆あれいの物語はこれで完結です(すべてのメソッドを網羅できたわけではないですが)。JavaScriptで配列を操るメソッドの面白さと奥深さ、少しでも伝われば幸いです。お付き合いありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?