どうも、イソップです。 IE11では、Array.prototype.includesメソッドがサポートされていないため動作しません。 includesメソッドを使わないのが一番簡単ですが、Polyfill(ポリフィル、… The includes method is part of ES6 that can also be used to determine whether an array contains a specified item. Array#includes x 861,062,120 ops/sec ±0.51% (91 runs sampled) Fastest is Array#includes Node.js 11.11.0 (includes is 80x faster): Array#indexOf x 10,776,587 ops/sec ±4.10% (78 runs sampled) Array#includes x 854,403,715 This method returns true if the element exists in the array, and false if not. 配列(Array)は我々プログラマにとって馴染み深い要素のひとつです。配列はどんな入門書にも登場し、どんな高度なプログラムにおいても大活躍します。そしてJavaScritpに限らず、他の言語でも配列(あるいはリスト)は登場します。こんなにも身近な配列ですが、「なんとなく」で使っていて「配列とはなんなのか」「何ができるのか」をあまり把握できていない方も多いと思います(もちろん私もそうです!)。引数が1つのときは配列のサイズを指定したことになり、そのサイズの配列が作成されます。2つ以上の引数を指定したときは配列の要素を指定したことになり、その要素をもつ配列が作成されます。インデックスは0から始まります。つまり、一番最初の要素は0番目になります。これは歴史的な理由によります。配列を伸ばしたとき、新たな領域には何も値が入らず、空になります。また、配列を短くしたとき、はみ出てしまった要素は削除されます。lengthプロパティの変更だけでなく、一部のメソッドでも長さが変わります。例えば配列の後ろに値を追加するpushメソッドなどがあります。JavaScriptの型はプリミティブ型(文字列、数値など)とオブジェクト型(Objectなど)に大別できますが、また、配列はオブジェクトであるため、常にtruthy(trueとして扱われる)です。空配列もtrue扱いになります。Array.fromはstaticなメソッドで、配列っぽいもの(array-like)およびiterableオブジェクトから新しい配列を作成します。配列のコピーなどに使用できます。このとき、コピーは浅いコピー(シャローコピー)となり、中のオブジェクト自体は複製されません。あくまでも配列のコピーとなります。Array.fromが受け付けるのは配列だけでなく、配列っぽいもの(array-like)とiterableなので、例えばNodeListを配列に変換することなども可能です。Array.fromでは、第二引数に関数を入れることで、変換時にmapメソッドを同時にかけることもできます。Array.isArrayは、引数の値が配列かどうかをチェックすることができます。配列ならばtrueを返し、そうでなければfalseを返します。Array.ofは引数に与えられた値を持った配列を作成します。newえ配列を作成するときとほぼ同じです。異なるのは、引数がひとつのときの挙動で、Array.ofは引数がひとつでも、その要素を持った配列を作成します。concatは配列同士を結合し、新しい配列を生成するメソッドです。このメソッドは元の配列および引数に与えた配列を変更せず、ただ新しい配列を返します。copyWithinメソッドは、配列内の一部を、配列内の別の場所にコピーして上書きします。戻り値は配列自身です。第一引数にコピー先を指定し、第二引数にコピー元の開始地点、第三引数にコピー元の終了地点を指定します。デフォルトでは配列の先頭から末尾までの全てがコピー元になります。範囲はstartを含み、endを含みません。everyメソッドはテスト関数を受け取り、配列の要素全てがテスト関数を通過した時にtrueを返し、ひとつでもテストに落ちればfalseを返すメソッドです。テスト関数は最大3つの引数を取ります。第2引数は現在の値のインデックスで、第3引数は対象の配列そのものです。fillメソッドは配列のstartからendまでのインデックスの値をvalueにします。このときendは含まれません。fileterメソッドはテスト関数をtrueで通過した要素のみを新たな要素とする、新たな配列を返します。元の配列は変更しません。テスト関数は引数を1つから3つ受け取る関数で、trueかfalseを返します。つまりeveryメソッドのテスト関数と同じです。第1引数に値を、第2引数に値のインデックスを、第3引数に配列そのものを受け取ります。findメソッドはテスト関数がtrueになる最初の要素を返します。見つからない場合はundefinedを返します。findIndexメソッドはfindメソッドとほぼ同じですが、こちらは配列の値ではなくインデックスを返します。flatメソッドは配列内の配列を展開して、新しい配列を返します。depthには何段階まで展開するかの深さをしてできます。元の配列は変更しません。forEachメソッドは配列の各要素に対して順番にcallback関数を適用します。戻り値はありません。ただしforEachメソッドはforやfor-ofと比べると著しく遅く、巨大な配列に対して使用すべきではありません。includesメソッドは配列にsearchElementが含まれている場合はtrueを、そうでない場合はfalseを返します。fromIndexには検索開始位置を指定できます。負の値を与えた場合は、末尾からのインデックスになります。indexOfメソッドは配列のsearchElementのインデックスを返します。存在しない場合は-1を返します。fromIndexには検索開始位置を指定できます。負の値を与えた場合は、末尾からのインデックスになります。joinメソッドは、配列の全ての要素をカンマで繋いだ文字列を返します。separatorを指定することでカンマ以外の区切り文字も使えます。区切り文字を使いたくない場合は、空文字列を渡します。keysメソッドは配列のキーを扱うiteratorを返します。配列のキーとは、つまりインデックスのことです。entriesメソッドのキーのみ版と言えます。lastIndexOfは配列を末尾から検索し、searchElementのあるインデックスを返します。見つからない場合は-1を返します。fromIndexを指定すると、fromIndexから逆向きに検索していきます。mapメソッドは、配列の各要素に対してmapFunc関数を適用し、その結果をまとめた配列を新しい配列として返します。元の配列は変更されません。popメソッドは配列の最後の要素を取り出して返し、配列から削除します。配列が空の場合はundefinedを返します。このメソッドはスプレッド演算子による配列の展開とも相性が良く、別の配列の値を個別にpushすることもできます。reduceメソッドは、配列の値に対してinitialValueを初期値として、左から右に次々とcallback関数を適用していき、ひとつの値にまとめて返します。元の配列は変更されません。initialValueが指定されたときは、initialValueを初期値として、最初の要素から処理が開始されます。initialValueに初期値を指定しないときは、配列の最初の値をinitialValueとして、2番目の要素から処理を開始します。この複雑なメソッドを理解するための第一歩は「配列の総和」です。配列の各要素を次々と足していき、総和を求めます。このときcallback関数は2つの引数を取ります。ひとつめはprevで、callback関数が前の実行時に返した値がここに入ります。まだ初めの実行のときは、initialvalueが入ります。ふたつめはcurrentで、配列の左から順番に、現在の値が入ります。今回はinitialValueが未指定なので、2番目の要素(つまり「10」)から始まります。このとき「10」に対してcallback関数を実行し、prev + currentで、5 + 10を計算して「15」を返しています。この「15」が次のcallback実行時のprevになります。次に3番目の要素「20」に対してcallback関数を実行し、prevは「15」でcurrentは「20」です。ここでprev + currentを返すので、「35」です。これで配列の最後まで行ったのでこれを最終結果とし、このメソッドの戻り値は「35」となります。initialValueやcallback関数の戻り値は数値である必要はなく、オブジェクトなどでも実行可能です。reduceRightメソッドは右から左に向けてreduceします。使い方はreduceメソッドと同じです。reverseメソッドは配列を反転させ、反転させた配列を返します。このメソッドは元の配列を変更します。shiftメソッドは配列から最初の値を取り出し、返します。popメソッドは最後の値を取り出しましたが、shiftメソッドは最初の値を取り出します。配列が空の場合はundefinedを返します。sliceメソッドは配列の一部(beginからendまで)を切り出し、新しい配列として返します。endの値は含めず、endの直前までを切り出します。someメソッドは配列の要素の最低ひとつでもテスト関数に合格するならtrueを、ひとつも合格しないならfalseを返します。テスト関数はtrueかfalseを返す関数です。このメソッドはeveryメソッドと似ていますが、everyメソッドは全ての要素が合格しないといけないのに対し、someメソッドはひとつでも合格すればtrueになります。また、余談ですが、このsomeメソッドを配列のイテレーションに使うことを推奨する劣悪な資料がネット上にはあります。someメソッドはあくまでも配列の要素がテスト関数を満たすかどうかをチェックするためのメソッドであり、イテレーションのためのメソッドではありません。単純なイテレーションの場合はfor、for-of、forEachメソッドなどを使用してください。compareFuncに任意の比較関数を渡すことで、ソートの挙動を変更できます。compareFuncは負数、0、正の数のいずれかを返します。compareFuncを指定しない場合は、辞書順ソートとなるため、たとえば「70」は「8」より前に来ます。spliceメソッドは、配列の中から要素を取り除きます。また、取り除いた後に要素を付け加えることも可能です。このメソッドは元の配列を変更します。Arrayには「remove」のようなメソッドがないため、特定要素を取り除くためにもspliceはよく使用されます。unshiftメソッドは配列の最初に要素を追加し、追加後の配列の長さを返します。このメソッドは元の配列を変更します。