0
1

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☆あれい 第10話「もうmapにもforEachにも頼らない」

Last updated at Posted at 2020-03-22

登場人物

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

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

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

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

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

map()

イテレー太「さあ、引き続き戦いの真っ最中だよ!」
あれい「いつまで続くんだよこの駄犬」
イ「召喚したデータは第8話を参照してね! そして、今回の敵の弱点は、『記事のタイトル(title)と使用されているタグ(tags)の名前(name)を一覧にしたもの』だよ!」
あ「要は見出しか」
イ「そうだよ! さあ、記事の見出しをreturnして敵を倒してよ!」
あ「面倒くせえなあ……」

return items.map(item => `${item.title} (${item.tags.map(tag => tag.name).join('/')})`)

あ「これでいいのか」
イ「あれい、今回も解説をお願い!」
あ「ああん? 面倒くせえなあ……だから、map() メソッドですべての記事にアクセスしてtitletagsを取得するだろ」
イ「ふむふむ」
あ「で、さらにtags内のすべての要素にmap() メソッドでアクセスして、nameのみの配列を作成してから、それをjoin()メソッドで連結してるんだよ」
イ「いやー、さすがはあれい! 魔法少女コスが壊滅的に似合わないけど仕事は早いね!」
あ「しばくぞ」

解説

map() メソッドは、与えられた関数を配列のすべての要素に対して呼び出し、その結果からなる新しい配列を生成します

MDNより)

配列のすべての要素に対してコールバック関数を実行し、返ってきた結果で新しい配列が作成されます。
コールバック関数では、filter() メソッドと同じく、「現在の要素、現在の要素のインデックス、元の配列」という3つの引数を使用できます。

forEach()

解説

forEach() メソッドは与えられた関数を、配列の各要素に対して一度ずつ実行します。

MDNより)

さて、forEach() メソッドについては解説のみとなります。なぜなら、forEach() メソッドには戻り値がないため、敵に攻撃できないからです。
配列のすべての要素に対して関数を実行する……という点ではmap() メソッドなどと同じ動きをしますが、戻り値がないのでメソッドチェーンとして使用しづらく、map()reduce()を使わずにあえてforEach() を使うというケースが、正直言って思いつきません。
(……逆に言うと、他のオブジェクトであるMapSetではforEach()くらいでしか反復処理ができないけど、Arrayオブジェクトは便利なメソッドが豊富に揃っていて幸せだなー、という事なんでしょうね。多分……)

あ「なんだこの試合放棄感丸出しの解説は」
イ「一応、記事のタイトルを順にコンソールに出力する例だけでも提示しておいてよ!」
あ「面倒くせえなあ……」

items.forEach(item => console.log(item.title));

次回予告

ずっと配列の要素達にコールバック関数を実行しながら、あなたは何も感じなかったの?
皆がどんな風にアキュムレータに代入されたか、わかってあげようとしなかったの?

第11話 最後に残ったreduceとreduceRight

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?