Part12:配列

海未「今回は配列です。JavaScriptでは配列操作は非常によく使いますし、特に配列の反復操作はforwhileのループ以上によく使うと思います」

海未「配列リテラルは以前見ましたが、改めて配列の作り方を見ておきましょう」

海未「この3つは全く同じ配列を生成しますから、一般的には一番下を使えばよいでしょう」
ことり「上の方の書き方は、Arrayオブジェクト、ってやつなのかな?」
海未「はい。newを使うのはDateの時と同じですね。ただ配列の場合、[]で同じことが書けるのであまりこの書き方は使わないです」

海未「後から値を追加していくこともできます」

海未「[]を使うと指定した位置に追加、pushは末尾に追加です」

海未「indexOflastIndexOfで要素の探索ができます」

穂乃果「あ、文字列と同じなんだ」
海未「文字列も文字の並びという意味で似た概念ですから、よく似た操作ができたりします。sliceもできますから、試してみてください」

海未「複数の配列をconcatでつなげることができます」

海未「joinで配列を1つの文字列にすることができます」

海未「引数で渡した文字が区切り文字になります」
ことり「♡」
穂乃果「♡」
海未「・・・い、一般的には、CSVを作るのに,で区切るなどの使い方がよく使われます」

海未「reverseは配列の順序を逆にします」

穂乃果「今回はそんなに難しくないねっ」
海未「では高階関数系にいきましょうか」

海未「よく使うforEachから見てみましょう。配列の各要素に対して順番に処理を行うものです」

ほの
こと
うみ

海未「これが配列の反復処理によく使われるforEachです。配列の各要素ごとに与えられた関数を実行します」
穂乃果「むむむ・・・」
ことり「これは、関数を、引数として渡してるんだよね?」
海未「はい。引数を1つ取る関数を渡すと、その関数に配列の要素を1つずつ渡して実行してくれます」
ことり「それで、それぞれにconsole.log()が実行されてるんだね」
穂乃果「わかるようでわからない・・・」
海未「forEachそのものはforwhilleのような機能しか持ちません。ブロック内の処理を関数にして渡してあげるのです」

海未「このmapfilterもよく使いますね。配列の各要素に特定の処理を適用した結果の配列を返すのがmap、条件に合う要素だけを抽出するのがfilterです」
穂乃果「むむむむ・・・」
ことり「えーと、mapは、まず”ほの”に対してe + eするから”ほのほの”で、”こと”と”うみ”にも同じことをするから、["ほのほの", "ことこと", "うみうみ"]なんだ」
海未「ことりはさすがですね」
ことり「♡」
穂乃果「よーし、穂乃果だって・・・filterは・・・これ、trueを返したやつだけが残るっていうこと?」
海未「残る、だと少し不正確ですね。mapfilterも元の配列は変更されませんから、filterは関数がtrueを返すもののみを含む新しい配列を返す、という動きになります」

海未「もうひとつくらい見ておきましょう」

海未「reduceは畳み込みといって、この場合は左から順に要素を足していって合計を返します」
ことり「最初はfirstが25000でsecondが250・・・?」
海未「いえ、第2引数の0が初期値になりますから、最初はfirstが0でsecondが25000です」
ことり「それで次が25000と250で、その次が25250と2になって、25252!」
海未「そうです。前回の戻り値が次のfirstになるのです」
穂乃果「むむむむむ・・・」
海未「このように関数を引数に取る高階関数はeverysomeなど他にもありますから、リファレンスを見てみるのもよいでしょう」


海未「JavaScriptで複雑なプログラムを書くようになると、今回見たような配列操作を多用することになります。穂乃果はきっちり復習するように」
穂乃果「はーい・・・」
ことり「穂乃果ちゃん、あとで復習しようね・・・」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です