Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この章では、インデックス値により順序付けされたデータのコレクションを紹介します。これには配列と、Array オブジェクトや TypedArray オブジェクトなどの配列風の構造物があります。
配列は、名前やインデックスで参照する値からなる順序付きリストです。
例えば、emp という配列を作成し、数値の従業員番号でインデックス付けして従業員名を格納するとします。つまり、emp[0] が従業員番号 0、emp[1] が従業員番号 1、のようになります。
JavaScript は明確な配列データ型を持っていません。しかし、アプリケーションでは配列として機能する定義済みの Array オブジェクトとそのメソッドを利用することができます。Array オブジェクトには、結合、反転、ソートなど様々な方法で配列を操作するメソッドがあります。また、配列の長さを特定するプロパティや、正規表現で使用するプロパティなどがあります。
この記事では配列を中心に説明しますが、配列と型付き配列には共通するメソッドが多いため、同じ概念の多くが型付き配列にも当てはまります。型付き配列の詳細については、型付き配列ガイドを参照してください。
以下の文は同じ配列を生成します。
element0, element1, …, elementN は配列要素になる値のリストです。これらの値が指定されると、この配列の要素はそれらの値に初期化されます。配列の length プロパティは引数の数に設定されます。
角括弧による構文は「配列リテラル」または「配列初期化子」と呼ばれます。この構文はその他の形式による配列作成よりも短いため、一般的に好まれる方法です。詳細については、配列リテラルをご覧ください。
長さがゼロではないが項目のない配列を作成するには、以下の方法が使用できます。
メモ: 上記のコードでは、arrayLength は Number(数値)である必要があります。さもないと、(指定した値の)単一の要素を持つ配列が生成されます。arr.length を呼び出すと arrayLength が返されますが、配列には要素が存在していません。この配列で for...in ループを実行しても、配列の要素は返されません。
上記のように新規に定義した変数に割り当てるだけでなく、新規または既存のオブジェクトのプロパティに配列を割り当てることができます。
単一の要素で配列を初期化しようとして、その要素が Number である場合、角括弧の構文を使用する必要があります。単一の Number 値が Array() コンストラクターや関数に渡されると、単一の数値要素としてではなく、arrayLength として解釈されます。
これは、数値 42 の要素一つだけの配列を生成します。
これは、要素がなく arr.length が 42 に設定された配列を生成します。
これは次のコードと同じです。
N の値が小数部分がゼロではない実数である場合、 Array(N) を呼び出すと、結果は RangeError になります。以下の例ではこの動作を示します。
任意のデータ型の単一の要素を持つ配列を作成したければ、配列リテラルを使用した方が安全です。あるいは、単一の要素を追加する前に空の配列を作成しましょう。
ES2015 から単一の要素を持つ配列を生成するために Array.of 静的メソッドを使用することができます。
要素はプロパティでもあるので、プロパティアクセサーを使ってアクセスすることができます。以下の配列を定義するとします。
要素のインデックスは 0 から始まるので、配列の 1 番目の要素を myArray[0]、2 番目の要素を myArray[1] と呼ぶことができます。
メモ: プロパティアクセサーを使用して、オブジェクトのように配列の他のプロパティにアクセスすることもできます。
下記のように、要素に値を割り当てることで配列にデータを追加することができます。
メモ: 上記のコードで配列演算子(角括弧)内に整数ではない値を指定すると、配列要素ではなく配列を表すオブジェクトのプロパティとして作成されます。
配列を作成するときにも、データを追加することができます。
実装レベルでは、JavaScript の配列は、配列のインデックスをプロパティ名として使用して、その要素を標準的なオブジェクトのプロパティとして格納します。
length プロパティは特別です。これは常に、存在する最後の要素のインデックスより大きな正の整数になります。(次の例では、'Dusty' のインデックスは 30 なので、cats.length は 30 + 1 を返します。)
JavaScript の配列のインデックスは 0 から始まるものであり、 1 からではないことを思い出してください。これは、length プロパティは配列に格納されている最大のインデックスより 1 つ大きい値になるということです。
length プロパティに値を割り当てることもできます。
格納されているアイテムの数より小さい値を設定すると、配列は切り捨てられます。すなわち、0 に設定すると完全に配列を空にします。
よく行われるのは配列に含まれる値に対し、それぞれの値について、次のようになんらかの処理を行うことです。
配列内の要素がいずれも論理値としては false に評価されないことがわかっている場合 ― 例えば配列が DOM ノードのみで構成されている場合などには、例のように、より効率的な表現を使用できます。
この例では、配列の長さのチェックに掛かるオーバーヘッドを回避しています。そしてより便利に使えるように、ループの反復のたびに div 変数に現在の項目を代入するようにしています。
配列を反復処理する別の方法として forEach() メソッドがあります。
forEach に渡される関数では、その関数への引数に配列の要素が渡されて、配列内の各項目ごとに 1 回ずつ実行されます。値が割り当てられていない要素は forEach ループで反復されません。
配列定義の際に省略された要素は、forEach によって反復処理されるときには現れませんが、配列要素に undefined が割り当てられている場合は現れることに注意してください。
JavaScript では、配列の要素は標準的なオブジェクトプロパティとして保存されるので、for...in ループを使って JavaScript 配列を反復処理するのはお勧めできません。というのも、通常の要素とすべての列挙可能なプロパティが現れるからです。
Array オブジェクトには以下のようなメソッドがあります。
concat() は 2 つの配列を結合し、新しい配列を返します。
join() は、配列のすべての要素を文字列に結合します。
push() は 1 つ以上の要素を配列の最後に追加し、その新しい配列の長さを返します。
pop() は配列から最後の要素を取り除き、その要素を返します。
shift() は配列から最初の要素を取り除き、その要素を返します。
unshift() は 1 つ以上の要素を配列の先頭に追加し、その新しい配列の長さを返します。
slice() は配列の一部を抽出し、新しい配列を返します。
at() メソッドは、配列の指定したインデックスの要素を返し、インデックスが範囲外の場合は undefined を返します。特に、負のインデックスを使用して配列の末尾から要素にアクセスする場合に使用されます。
splice() は要素を配列から取り除き、 (必要に応じて) 置き換えます。配列から削除された項目を返します。
reverse() は、配列の中の要素をその場で反転させます。配列の最初の要素が最後に、最後の要素が最初になります。配列への参照を返します。
flat() メソッドは、すべてのサブ配列要素が指定した深さまで再帰的に連結された新しい配列を返します。
sort() は配列の要素をその場でソートし、その配列の参照を返します。
sort() は、配列要素をどのように比較するかを決定するコールバック関数を取ることができます。コールバック関数は、配列内の2つの値を引数として呼び出されます。この関数は、これら 2 つの値を比較し、2 つの値の順序を示す正の値、負の値、または 0 を返します。例えば、以下は文字列の最後の文字で配列をソートするものです。
indexOf() は配列から searchElement を検索します。そして、最初に一致した位置のインデックスを返します。
lastIndexOf() は indexOf のように動作しますが、最後の要素から開始して前方に検索します。
forEach() は配列のすべての項目にコールバック関数 callback を実行し、undefined を返します。
コールバックを受け取る forEach メソッド(および下記のもの)は、配列全体を何らかの方法で反復処理するため、反復処理メソッド として知られています。それぞれのメソッドは、オプションで thisArg という 2 つ目の引数を取ります。指定された場合、thisArgはコールバック関数の本体の中で this キーワードの値となります。指定されなかった場合、関数が明示的なオブジェクトコンテキストの外で呼び出される他のケースと同様に、this はグローバルオブジェクト(window、globalThis など)を参照しています。これは関数が厳格モードでない場合であり、関数が厳格モードの場合は undefined となります。
メモ: 上で紹介した sort() メソッドは反復処理メソッドではありません。そのコールバック関数は比較のためにのみ使用され、要素の順序に基づく特定の順序で呼び出されることはないためです。sort() は thisArg という引数も受け入れません。
map() はすべての配列アイテムごとにコールバック関数 callback を実行し、返値からなる新しい配列を返します。
flatMap() メソッドは、map() に続いて深さ 1 の flat() を実行します。
filter() はコールバック関数 callback が true を返す項目からなる新しい配列を返します。
find() メソッドは、 callback が true を返した最初の項目を返します。
findLast() メソッドは、callback が true を返した最後の項目を返します。
findIndex() メソッドは、callback が true を返した最初の項目のインデックスを返します。
findLastIndex() メソッドは、callback が true を返した最後の項目のインデックスを返します。
every() はコールバック関数 callback が配列内のすべてのアイテムで true を返す場合に true を返します。
some() はコールバック関数 callback が配列内の少なくとも一つのアイテムで true を返す場合に true を返します。
reduce() は、配列の各値に対して callback(accumulator, currentValue, currentIndex, array) を適用し、項目のリストを 1 つの値に減らすことを目的としています。 reduce 関数は、 callback 関数によって返された最終的な値を返します。
initialValue が指定された場合は、initialValue を第 1 引数の値として、配列の最初の項目の値を第 2 引数の値として callback が呼び出されます。
initialValue が指定されていない場合、callback の最初の 2 つの引数の値は、配列の最初と 2 番目の要素になります。後続のすべての呼び出しで、最初の引数の値は前の呼び出しで callback が返した値になり、2 番目の引数の値は配列の次の値になります。
callback が処理対象の項目のインデックスにアクセスする必要がある場合は、配列全体にアクセスするときに、オプションの引数として利用できます。
reduceRight() は reduce() のように機能します。しかし最後の要素から適用を開始します。
reduce と reduceRight もある意味では配列の反復処理メソッドです。要素列を単一の値に還元するために、再帰的に 2 つの値を組み合わせるアルゴリズムにこれらのメソッドを使用してください。
配列と他のデータ構造の間で相互に変換することができます。
Object.groupBy() メソッドを使用して、現在の要素のグループを示す文字列を返すテスト関数を使用して、配列の要素をグループ化することができます。
こちらは商品の配列で、 name と type がある "food" オブジェクトがあります。
Object.groupBy() を使用するにあたっては、現在の要素で呼び出されるコールバック関数を指定します。オプションで現在のインデックスと配列を指定することもでき、要素のグループを示す文字列を返します。
次のコードでは、アロー関数を使用して配列のそれぞれの要素の型を返します(これは、関数の引数にオブジェクトの構造分解構文を使用して、渡されたオブジェクトから型要素を展開します)。結果は、コールバック関数によって返された一意の文字列を名前とするプロパティを持つオブジェクトとなります。それぞれのプロパティには、グループ内の要素を含む配列が割り当てられます。
返されたオブジェクトは元の配列と同じ要素を参照していることに注意してください(ディープコピーではありません)これらの要素の内部構造を変更すると、元の配列と返されたオブジェクトの両方に反映されます。
文字列をキーとして使用できない場合、例えばグループ化する情報が変更される可能性のあるオブジェクトに関連付けられた場合、代わりに Map.groupBy() を使用することができます。これは、配列の要素を任意の値(オブジェクト またはプリミティブ)をキーとして使用することができる Map にグループ化するという点を除いて、 Object.groupBy() とよく似ています。
配列は「空のスロット」を格納することができます。これは、値が undefined で満たされたスロットとは異なります。空のスロットは、以下のいずれかの方法で作成することができます。
一部の操作では、空のスロットに undefined が入ったように動作することがあります。
しかし、他の場合(特に配列反復処理)には、空のスロットはスキップされます。
配列メソッドが疎配列でどのように動作するかの完全なリストは、Array のリファレンスページを参照してください。
配列をネストすることができます、つまり配列要素として配列を含めることができることを意味します。JavaScript の配列の特徴を活かして、多次元配列を生成できます。
以下のコードでは 2 次元配列を作成しています。
この例では、次のテーブル行を持つ配列を作成しています。
Row 0: [0, 0] [0, 1] [0, 2] [0, 3] Row 1: [1, 0] [1, 1] [1, 2] [1, 3] Row 2: [2, 0] [2, 1] [2, 2] [2, 3] Row 3: [3, 0] [3, 1] [3, 2] [3, 3]配列は、オブジェクトのように関連する情報を格納するために使用することもできます。
例えば、配列が正規表現と文字列の一致した結果である場合、配列は一致した情報を提供するプロパティや要素を返します。RegExp.prototype.exec(), String.prototype. match(), String.prototype.split() は配列を返します。正規表現での配列の使用に関する情報については、正規表現を参照してください。
document.getElementsByTagName() によって返される NodeList や、関数本体内で利用できる arguments オブジェクトのように、表面上は配列のようにふるまう JavaScript オブジェクトがありますが、これらはメソッドすべてを共有してはいません。例えば、 arguments オブジェクトには length 属性がありますが、 forEach() メソッドは実装されていません。
配列風オブジェクトに対して配列メソッドを直接呼び出すことはできません。
これを行うには、 Function.prototype.call() を使って間接的に呼び出します。
配列のプロトタイプメソッドは、配列と同様の方法で文字に逐次アクセスできるため、文字列にも使用できます。
This page was last modified on 2026年4月12日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.