Array

この文書は翻訳中です。他国語のままの部分などがあるのはその為です。
是非お気軽に MDN に登録して翻訳に参加し、私たちの手助けをして下さい!

概要

JavaScript は配列を扱うことができます。配列とは順序を持つ複数のデータの集合であり、JavaScript のグローバルオブジェクトである Array は、高位の、(C言語等で云うところの)「リスト」の様な、配列のコンストラクタです。

構文

[element0, element1, ..., elementN] //配列リテラル
new Array(element0, element1, ..., elementN)
new Array(arrayLength)

引数

element0, element1, ..., elementN
数値が唯一の引数として Array コンストラクタに指定された場合以外は、配列は引数に指定された値を要素として初期化され、配列の length プロパティは引数の数に設定されます。
arrayLength
Array コンストラクタに渡される唯一の引数(arrayLength)に 0 から 4,294,967,295( 232-1 ) までの整数値を指定する場合は、その値を要素数とする配列が作成されます。その際に範囲外の値を指定した場合には、例外: RangeError がスローされます。

説明

配列とは、トラバーサルや変異などの操作の為のいくつかの組み込みメソッドを持つ、リストの様なオブジェクトの事を言います。JavaScript の配列は、要素数も型も固定されていません。配列のサイズは常に可変である為、JavaScript の配列は密であることが保証されていません。一般に、これらは便利な特性ではありますが、固定された配列が必要であれば、Typed Array の使用を検討するのも良いでしょう。

JavaScript の配列は連想配列として使うべきではありません。連想配列には Object を使うべきです。

配列要素へのアクセス

JavaScript の配列のインデックスは 0 から始まります。配列の最初の要素のインデックスは 0。つまり、最後の要素のインデックスは length プロパティの値より 1 小さい値になります。

var arr = ["最初の要素", "2 番目の要素"];
console.log(arr[0]);              // ログ : "最初の要素"
console.log(arr[1]);              // ログ : "2 番目の要素"
console.log(arr[arr.length - 1]); // ログ : "2 番目の要素"

toString が一つのプロパティであるように、配列における配列要素は Array オブジェクトのプロパティです。しかし、次のように配列の最初の要素にアクセスしようとすると、構文エラーがスローされる事に注意してください。

console.log(arr.0);

これは JavaScript の配列に限った話ではありません。オブジェクトの、数字から始まるプロパティに対してはドット演算子を用いた参照は出来ません。

var years = [1950, 1960, 1970, 1980, 1990, 2000, 2010];

try {
  console.log(years.0);
}
catch (ex) {
  console.log("ブラケット記法でのアクセス");
  console.log(years[0]);
}

そこで、ブラケット記法を用いる必要があります。"3d" というプロパティへのアクセスを試みる次のコードを見てください。

try {
  renderer.3d.setTexture(model, "character.png");
} catch (ex) {
  console.log("Using bracket notation");
  renderer["3d"].setTexture(model, "character.png");
}

必要は有りませんが、配列要素へのアクセスにも years[2] でなく years["2"] を使う事が出来ます。"2" と "02" が異なるインデックスであると認識する為に、JavaScriptエンジンが内部的にtoStringメソッドでインデックスに対する文字列への型変換を行っているためです。

console.log(years["2"] != years["02"]);

length と数値プロパティとの関係

JavaScript の配列の lengthプロパティと数値プロパティは関連しています。 joinsliceindexOf 等の配列のビルトインメソッドは、配列のlengthプロパティの値を考慮します。 また、pushsplice等は、配列の length プロパティも更新します。

var fruits = [];

fruits.push("banana", "apple", "peach");
console.log(fruits.length); // logs 3

有効なインデックスを持つ JavaScript の配列の現在のサイズに収まらない位置に要素を追加すると、配列はそれを収められる位置まで拡張され、length プロパティも更新されます。

fruits[3] = "mango";

console.log(fruits[3]);
console.log(fruits.length); // logs 4

length プロパティを直接設定した時も特殊な動作となります。

fruits.length = 10;

console.log(fruits);        // "undefined" で満たされている
console.log(fruits.length); // 10

これらについては length ページで更に解説します。

match の結果を利用して配列を作成

正規表現と文字列の一致から配列を作る事が出来ます。この配列にはプロパティと、マッチに関する情報を提供する要素を持ちます。 配列は RegExp.exec、 String.match、そして String.replace の戻り値です。 これらのプロパティと要素を理解するために、以下の例と表を参照して下さい。

// Match one d followed by one or more b's followed by one d
// Remember matched b's and the following d
// Ignore case

var myRe = /d(b+)(d)/i;
var myArray = myRe.exec("cdbBdbsbz");

プロパティとこの一致から返される要素は以下のとおりです。

プロパティ(要素) 説明
input 正規表現にマッチした文字列を反映する読み取り専用プロパティです。 cdbBdbsbz
index

マッチした文字列の0 から始まるインデックスを示す読み取り専用プロパティです。

1
[0] 最後にマッチした文字列を指定する読み取り専用の要素です。 dbBd
[1], ...[n] 正規表現に含まれる場合、括弧で囲まれたマッチした部分文字列を指定する読み取り専用の要素です。括弧で囲まれた部分文字列の数は無制限です。 [1]: bB
[2]: d

プロパティ

Array インスタンスから継承されているPropertiesについては、Array インスタンスのPropertiesを参照してください。

prototype
全てのオブジェクトにプロパティを追加することができます。
Function から継承されるプロパティ

メソッド

Array インスタンスから継承されているMethodsについては、Array インスタンスのMethodsを参照してください。
isArray JavaScript 1.8.5 が必要
配列であれば true を、配列でなければ false を返す

Array インスタンス

Array インスタンスは、Array.prototype を継承します。全てのコンストラクタと同様に、コンストラクタのプロトタイプオブジェクトを変更して、Array インスタンスの全てを変更することができます。

プロパティ

constructor
Specifies the function that creates an object's prototype.
length
Reflects the number of elements in an array.

メソッド

Mutator methods

constructor
Specifies the function that creates an object's prototype.
length
Reflects the number of elements in an array.

Accessor methods

constructor
Specifies the function that creates an object's prototype.
length
Reflects the number of elements in an array.

Iteration methods

constructor
Specifies the function that creates an object's prototype.
length
Reflects the number of elements in an array.

例: 配列を生成する

次の例では、空の配列「msgArray」を生成し、msgArray[0]msgArray[99] に値を設定、その後配列の要素数が 100 である事を確認しています。

var msgArray = new Array();
msgArray[0] = "Hello";
msgArray[99] = "world";

if (msgArray.length === 100) {
   print("配列の length は 100 です。");
} 

例: 2 次元配列を生成する

以下では、文字列の 2 次元配列としてチェスボードを生成しています。 最初の動きは 1,4 の 'P' を 3,4 にコピーすることでなされます。 位置 1,4 は空白にされます。

var board = 
[ ['R','N','B','Q','K','B','N','R'],
  ['P','P','P','P','P','P','P','P'],
  [' ',' ',' ',' ',' ',' ',' ',' '],
  [' ',' ',' ',' ',' ',' ',' ',' '],
  [' ',' ',' ',' ',' ',' ',' ',' '],
  [' ',' ',' ',' ',' ',' ',' ',' '],
  ['p','p','p','p','p','p','p','p'],
  ['r','n','b','q','k','b','n','r']];
print(board.join('\n') + '\n\n');

// キングの前のポーンを 2 つ前へ移動
board[4][4] = board[6][4];
board[6][4] = ' ';
print(board.join('\n'));

出力を以下に示します:

R,N,B,Q,K,B,N,R
P,P,P,P,P,P,P,P
 , , , , , , , 
 , , , , , , , 
 , , , , , , , 
 , , , , , , , 
p,p,p,p,p,p,p,p
r,n,b,q,k,b,n,r

R,N,B,Q,K,B,N,R
P,P,P,P,P,P,P,P
 , , , , , , , 
 , , , , , , , 
 , , , ,p, , , 
 , , , , , , , 
p,p,p,p, ,p,p,p
r,n,b,q,k,b,n,r

ブラウザ実装状況

機能 Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
基本サポート (Yes) (Yes) (Yes) (Yes) (Yes)
機能 Android Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile
基本サポート (Yes) (Yes) (Yes) (Yes) (Yes)

関連情報

タグ (3)

このページの貢献者: Taken, ethertank, Yuichirou, kuboon, Hfjapancom, hateka, Shoot, coeurl, Mgjbot, Potappo
最終更新:: hateka,
最終レビュー:: hateka,