Core JavaScript 1.5 Reference:Global Objects:Array
出典: MDC
目次 |
[編集] 概要
配列を扱うことができます。
[編集] 構文
var arr1 = new Array(arrayLength); var arr2 = new Array(element0, element1, ..., elementN);
配列リテラルは以下の形式を用います。:
var lit = [element0, element1, ..., elementN];
[編集] 引数
-
arrayLength - 配列の初期の長さ。あなたは length プロパティを使ってこの値にアクセスすることが出来ます。もし指定されている値が数字でなければ、第 1 要素が指定された値を持つ、長さ 1 の配列が生成されます。1 つの配列に許されている最大の長さは 4,294,967,295 です。
-
elementN - 配列の要素に対する値のリスト。この書式が指定された場合、配列は指定された値がその要素として初期化され、配列の length プロパティは引数の数に設定されます。
[編集] 説明
配列は、単一の変数名に関連付けられた、順番付けられた値の集合です。あなたはこれを連想配列としてではなく、オブジェクトとして使うべきだという事に注意して下さい。
以下の例は、配列リテラルで Array オブジェクトを生成します。配列 coffees は 3 つの要素で構成され、長さ 3 を持ちます。
var coffees = ["Kenyan", "Columbian", "Kona"];
あなたは添字 0 から始まる2つ以上の要素を持った密な配列を、全ての要素に初期値を定義すれば、生成することが出来ます。密な配列とは、それぞれの要素が値を持つ配列です。以下のコードは、3つの要素を持つ密な配列を生成します。:
var myArray = new Array("Hello", myVar, 3.14159);
[編集] 配列の添字
あなたは要素の添字(順番を表す数)を用いて、配列の要素を参照することができます。例えば、以下の配列を定義したとします。:
var myArray = new Array("Wind", "Rain", "Fire");
このとき、これらの要素を以下のようにして参照することが出来ます。
-
myArray[0]は 第 1 要素 -
myArray[1]は 第 2 要素 -
myArray[2]は 第 3 要素
[編集] 単一引数の指定
Array コンストラクタにただ 1 つ数字の引数を指定した場合、あなたは配列の初期の長さを指定したことになります。以下のコードは 5 要素の配列を生成します。:
var billingMethod = new Array(5);
Array コンストラクタの挙動はそのただ 1 つの引数が数字かどうかに依存します。
- もし指定された値が数字なら、コンストラクタは数字を符号無し 32-bit 整数に変換し、length プロパティ(配列のサイズ)にその整数を設定した配列を生成します。この配列は、たとえ長さが 0 でないとしても、最初は何の要素も含みません。
- もし指定された値が数字でなければ、第 1 要素にその指定された値を持つ長さ 1 の配列が生成されます。
以下のコードは長さ 25 の配列を生成し、その後最初の 3 要素に値を割り当てています。:
var musicTypes = new Array(25); musicTypes[0] = "R&B"; musicTypes[1] = "Blues"; musicTypes[2] = "Jazz";
[編集] 間接的な配列長の増加
もしある配列の現在の長さを超えるような要素に値を代入すると、配列の長さが増えます。以下のコードは長さ 0 の配列を生成し、そして要素 99 に値を代入します。これにより配列の長さは 100 に変化します。
var colors = new Array(); colors[99] = "midnightblue";
[編集] マッチ結果を利用した配列の生成
正規表現と文字列との間のマッチ結果は、配列を生成することがあります。この配列は、そのマッチについての情報を持つプロパティと要素を持ちます。RegExp.exec、String.match と String.replace の戻り値は配列です。これらのプロパティと要素を説明する助けとして、次の例を見て、そして下の表を参照してください。:
// 1つのd、続く1つ以上のb、続く1つのdにマッチ
// 一致したbと続くdを記憶
// 大小文字を無視
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 インスタンスから継承されているプロパティについては、Array インスタンスの プロパティ を参照してください
- prototype
- 全てのオブジェクトにプロパティを追加することができます。
Function.prototype から継承されるプロパティ
caller, constructor, length, name
[編集] メソッド
Array インスタンスから継承されているメソッドについては、Array インスタンスの メソッド を参照してください
グローバルな Array オブジェクトは、自分自身のメソッドを持っていませんが、プロトタイプチェーンを通していくつかのメソッドを継承しています。
Object.prototype から継承されるメソッド
__defineGetter__, __defineSetter__, hasOwnProperty, isPrototypeOf, __lookupGetter__, __lookupSetter__, __noSuchMethod__, propertyIsEnumerable, unwatch, watch
[編集] Array インスタンス
Array インスタンスは、Array.prototype を継承します。全てのコンストラクタと同様に、コンストラクタのプロトタイプオブジェクトを変更して、Array インスタンスの全てを変更することができます。
[編集] プロパティ
- constructor
- オブジェクトのプロトタイプを生成する関数を指定します。
- index
- これは、
Arrayプロトタイプの疑似プロパティです。なぜなら、デフォルトでは、継承されないからです。実際には、正規表現のマッチによって生成された配列にのみ存在します。このプロパティは、文字列中でマッチした部分のゼロから始まる添え字を表します。 - input
- このプロパティは、正規表現のマッチによって生成された配列にのみ存在します。正規表現がマッチを行った元の文字列を反映します。
- length
- 配列の要素数を反映します。
[編集] メソッド
[編集] 変異メソッド
これらのメソッドは配列を書き換えます。:
- pop
- 配列から最後の要素を取り除き、その要素を返します。
- push
- 配列の最後に 1 つ以上の要素を追加し、新しい配列の長さを返します。
- reverse
- 配列の要素の順番を逆転させます。最初の要素は最後に、最後の要素は最初になります。
- shift
- 配列から最初の要素を取り除き、その要素を返します。
- sort
- 配列の要素をソートします。
- splice
- 配列から要素を追加したり取り除いたりします。
- unshift
- 配列の最初に 1 つ以上の要素を追加し、新しい配列の長さを返します。
[編集] アクセサメソッド
これらのメソッドは配列を書き換えず、配列を何らかの形で表現したものを返します。
- concat
- 元の配列に他の配列や値をつないでできた新しい配列を返します。
- join
- 配列の全ての要素を繋いで文字列にします。
- slice
- 配列の一部を取り出して新しい配列を返します。
- toSource
- 非標準
- 指定された配列を表す配列リテラルを返します。あなたはこの値を新しい配列を作るのに使うことができます。Object.prototype.toSource メソッドを上書きしています。
- toString
- 配列とその要素を表す文字列を返します。Object.prototype.toString メソッドを上書きしています。
JavaScript 1.6 で導入
- indexOf
- 指定された値と等しい値を持つ最初の(添字の一番小さい)要素の添字を返します。もし見つからなかったら -1 を返します。
- lastIndexOf
- 指定された値と等しい値を持つ最後の (添字の一番大きい)要素の添字を返します。もし見つからなかったら -1 を返します。
[編集] 反復メソッド
JavaScript 1.6 で導入
いくつかのメソッドは引数として、配列を処理する際にコールバックされる関数を取ります。これらのメソッドが呼ばれる際、配列の length(長さ)を一時記憶するため、コールバック中にこの長さを超えて追加された要素には訪れません。配列に対するその他の変更(値の書き換えや要素の削除)は、もしメソッドが変更した要素に後で訪れた場合には、操作の結果に影響を及ぼすかもしれません。
そのような場合におけるこれらのメソッドの振る舞いはうまく定義されているわけではないので、コードを読む他者を混乱させないよう、これらのメソッドに頼るべきではありません。配列を変化させなければならない場合、代わりに新しい配列にコピーしてください。
- filter
- ある配列の要素で、与えられたフィルタリング関数が true を返したものすべてからなる新しい配列を生成します。
- forEach
- 配列中のそれぞれの要素について関数を呼び出します。
- every
- ある配列の全ての要素が与えられたテスト関数を満たした場合に true を返します。
- map
- ある配列の全ての要素について与えられた関数を呼び出した結果からなる新しい配列を生成します。
- some
- ある配列の少なくとも 1 つの要素が与えられたテスト関数を満たした場合に true を返します。
JavaScript 1.8 で導入
- reduce
- 1 つの値に還元されるように、配列の 2 つの値に対し(左から右へ)同時に関数を適用していきます
- reduceRight
- 1 つの値に還元されるように、配列の 2 つの値に対し(右から左へ)同時に関数を適用していきます。
Object.prototype から継承されるメソッド
__defineGetter__, __defineSetter__, hasOwnProperty, isPrototypeOf, __lookupGetter__, __lookupSetter__, __noSuchMethod__, propertyIsEnumerable, unwatch, valueOf, watch
[編集] 例
[編集] 例: 配列を生成する
以下の例では、長さ 0 の配列 msgArray を生成し、msgArray[0] と msgArray[99] に値を代入することで、配列の長さを 100 に変えています。
var msgArray = new Array();
msgArray[0] = "Hello";
msgArray[99] = "world";
if (msgArray.length == 100)
print("The length is 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[3][4] = board[1][4];
board[1][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