配列(Array)

[up] [prev] [next]

一覧

Array(), concat(), join(), length, pop(), push(), reverse(), shift(), slice(), sort(), splice(), unshift(),

配列

array = new Array() (e3/N3)
array = new Array(n) (e3/N3)
array = new Array(e1, e2, ...) (e4/N3)

n 個の要素を持つ配列、もしくはe1, e2, ...を要素とする配列を作成します。配列のインデックスは 0 から始まります。Netscape Navigator 3.0 では要素は最初 null に初期化されますが、Netscape Communicator 4.0 以降は undefined で初期化されます。n は省略可能です。下記のようにn - 1 を超えるインデックスも使用可能で、xx[6]を利用した時点で 0~6 まで7個の要素が生成されます。

xx = new Array(3);
xx[0] = "Sun";
xx[1] = "Mon";
xx[6] = "Sat";
yy = new Array("Sun", "Mon", "Thu");
alert(yy[0] + yy[1] + yy[2]);

以下のようにして2次元配列も扱うことができます。

xx = new Array(3);
for (i = 0; i < xx.length; i++) {
    xx[i] = new Array(4);
    for (j = 0; j < xx[i].length; j++) {
        xx[i][j] = i * 10 + j;
    }
}
alert(xx[2][3]);

以下のようにして[ ] 内に文字列を使用することもできます。

xx = new Array();
xx["Sun"] = "Sunday";
xx["Mon"] = "Monday";
alert(xx["Sun"]);

該当の要素が存在するかどうかを調べるには in を用います。

xx = new Array();
xx[0] = "AAA";
xx[1] = "BBB";
xx[2] = "CCC";
if (1 in xx) { /* 実行される */ }

要素を削除するには delete を用います。この場合、xx[1] は undefined になりますが、xx[0] や xx[2] はそのまま残ります。

xx = new Array(3);
xx[0] = "AAA";
xx[1] = "BBB";
xx[2] = "CCC";
delete xx[1];

delete を使用した場合は要素自体が削除されますが、undefined を代入した場合は要素の値が undefined となり、要素自体は残ります。

xx[1] = undefined;
if (1 in xx) { /* 実行される */ }
delete xx[1];
if (1 in xx) { /* 実行されない */ }

配列の長さ

array.length (e3/N3)

配列要素の個数を得るには length プロパティを参照します。

for (i = 0; i < xx.length; i++) {
    alert(xx[i]);
}

length に 0 を代入することで、配列の要素をすべて削除することができます。

xx.length = 0;

配列の連結

array.concat(array2, ...) (e4/N4)

arrayarray2 を連結した配列を返します。array は変更されません。引数に複数指定することも可能です。

xx = new Array("Sun", "Mon", "Tue", "Wed");
yy = new Array("Thu", "Fri", "Sat");
zz = xx.concat(yy);     // zz は "Sun", ...., "Sat" となる
array.join([separator]) (e4/N3)

array の各要素の値を separator で連結した文字列を返します。separator を省略した場合は通常カンマ(,)で連結されますが、JavaScript のバージョンによって動作が異なるので省略しない方が無難です。array は変更されません。

xx = new Array("2000", "12", "31");
yy = xx.join("/");     // yy は "2000/12/31" となる

配列要素の取り出しと追加

array.unshift(e1, e2, ...) (N4)
array.push(e1, e2, ...) (N4)

unshift() は array の先頭に e1, e2, ... の配列要素を加えます。push() は array の最後に配列要素を加えます。戻り値は JavaScript のバージョンによって異なります。

xx = new Array("Sun", "Mon");
xx.push("Tue");
xx.push("Wed");
array.shift() (N4)
array.pop() (N4)

shift() は array の最初の要素を削除します。pop() は array の最後の要素を削除します。array 自身が変更されます。戻り値は削除した値となります。

array.splice(start, n, e1, e2, ...) (N4)

0 から数えて、start 番目から n 個の要素を削除し、その代わりに e1, e2, ...を値とする要素を埋め込みます。戻り値は JavaScript のバージョンによって異なります。

xx = new Array("A", "B", "C", "D", "E", "F", "G");
xx.splice(2, 3, "c", "d", "e");   // "C", "D", "E" が小文字になります
array.slice(start [, end]) (e4/N4)

0 から数えて、start 番目~ end - 1 番目までの要素を抜き出した配列を返します。end を省略した場合は最後までの要素を返します。array は変化しません。

配列の並べ替え

array.sort([func]) (e4/N3)

array をソートしてその結果の配列を返します。array 自身がソートされます。func で比較関数を指定することも可能です。比較関数では負数、0、正数によって順序を返すようにします。

xx = new Array(3, 7, 8, 1);
xx.sort();
alert(xx);

function hikaku(a, b) { return(b - a); }
yy = new Array(3, 7, 8, 1);
yy.sort(hikaku);
alert(yy);
array.reverse() (e4/N3)

array を逆順に並べ替えてその結果の配列を返します。array 自身が並べ替えられます。

xx = new Array(1, 2, 3, 4);
xx.reverse();
alert(xx);

ブラウザの互換性の問題

Netscape Navigator 2.0 でも Array() を使用可能ですが、動作が不安定なので、次のような関数を自分で作成して用いなくてはなりません。Netscape Navigator 2.0 では xx[0] は xx.length(最初に定義された属性)を示すため、配列の序数は 1 から始めなくてはなりません。

function MakeArray(n) {
    this.length = n;
    for (i = 1; i <= n; i++) {
        this[i] = "";
    }
    return(this);
}
xx = new MakeArray(3);
xx[1] = "AAA";
xx[2] = "BBB";
xx[3] = "CCC";

Netscape Communicator で LANGUAGE 属性に JavaScript1.2 を指定した場合、new Array(3) は Array(e1, e2, ...) の形式と解釈され、xx[0] が 3 という値をもつ単一要素を生成します。JavaScript1.3 では JavaScript1.1 の仕様に戻されました。


[up] [prev] [next]
Copyright (C) 1996-2001 杜甫々
改訂版初版:2001年5月20日、最終更新:2006年2月17日
http://www.tohoho-web.com/js/array.htm