魔法JS☆あれい 第9話「someなの、everyが許さない」


登場人物

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

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

第1部「ミューテーター・メソッド編」
* 第1話「popでpushした、ような……」
* 第2話「shiftはとってもunshiftって」
* 第3話「もうsortもreverseも怖くない」
* 第4話「fillも、spliceも、copyWithinもあるんだよ」

第2部「アクセサ・メソッド編」
* 第5話「joinなんて、concatなわけない」
* 第6話「indexOfなの絶対lastIndexOf」
* 第7話「includesのsliceと向き合えますか?」

第3部「イテレーション・メソッド編」
* 第8話「filterって、ほんとfindとfindIndex」

some()

イテレー太「さあ、戦いはまだまだ続くよ!」
あれい「ちょっと休憩させろよ駄犬」
イ「召喚したデータは前回を参照してね! そして、今回の敵の弱点は、『'JavaScript'というタグを含む記事一覧』だよ! さあ、条件に合致するデータをreturnして敵を倒してよ!」
あ「面倒くせえなあ……」

return items.filter(item => item.tags.some(tag => tag.name === 'JavaScript'))

あ「これでいいのか」
イ「あれい、また解説をお願い!」
あ「ああん? 面倒くせえなあ……だから、それぞれの記事アイテムのtagsプロパティをsome() メソッドで検索して、nameが'JavaScript'のタグが1個でもあればtrueを返してだな、それをfilter()メソッドで抽出してるんだよ」
イ「さすがはあれい! 口は悪いけど仕事は早いね!」
あ「やかましいわ」

解説

some() メソッドは、配列の少なくとも 1 つの要素が、渡された関数によって実施されるテストに通るかどうかをテストします。

MDNより)

配列のすべての要素に対してテスト関数を実行し、条件に合致する要素が1つでもあればtrueを、なければfalseを返します。
テスト関数に渡される引数はfilter() メソッドと同じです。

every()

イ「問題。『本文(body)中に'JavaScript'という文字列を含む記事は、必ず'JavaScript'というタグが付けられている』。○か×か?」
あ「なんだよ急に。ウルトラクイズか」
イ「なんで女子小学生がウルトラクイズを知ってるのかは置いといて、その答えが次の敵の弱点だよ! さあ、答えを調査して、敵を倒してよ!」
あ「面倒くせえ事この上ねえな……」
イ「頑張れ! あれい!」

return items.filter(item  => /JavaScript/.test(item.body))
.every(item => item.tags.some(tag => tag.name === 'JavaScript'));

あ「これでいいのかよ」
イ「あれい、また解説をお願い!」
あ「ああん? 面倒くせえなあ……だから、まずは本文中に'JavaScript'という文字列を含む記事だけを抽出してだな、次にその記事が'JavaScript'タグを含むかをsome() メソッドで判定し、最後にすべてがtrueを返したかをevery() メソッドで判定してるんだよ」
イ「さすがはあれい! 女子小学生らしさは皆無だけど仕事は早いね!」
あ「黙れ」

解説

every() メソッドは、与えられた関数によって実行されるテストに、配列のすべての要素が通るかどうかをテストします。

MDNより)

every() メソッドは、配列のすべての要素に対してテスト関数を実行し、すべての要素が条件に合致した場合のみtrueを、そうでなければfalseを返します。
テスト関数に渡される引数はfilter() メソッドと同じです。

次回予告

誰も、コールバック関数から逃れられない。
誰も、コールバック関数からthisを参照できない。

第10話 もうmapにもforEachにも頼らない