配列

生成

Array コンストラクタを利用する方法。引数に配列のサイズを指定できるけど,必要なら勝手に大きくなってくれる。

var a1 = new Array();
a1[0] = "dog";
a1[1] = "cat";
a1[2] = "elephant";

コンストラクタに値を直接渡す方法。

var a2 = new Array("dog", "cat", "elephant");

リテラル。

var a3 = ["dog", "cat", "elephant"];

要素の型は何でも良い。

var a4 = ["Andy", 16, new Date()];

配列の長さ

長さを得るには length プロパティ。必要なら自動的に長くなる。

var a = new Array("andy", "bill", "charlie");
document.write(a.length, "<br>");      // => 3

a[4] = "eddy";
document.write(a.length, "<br>");      // => 5

document.write(a[3], "<br>");      // => undefined

↑a[3] は代入されてないので,undefind になる。

sort

sort() メソッドに引数には,比較関数を渡す。単純に大小関係で比較するなら省略していい。

var a = [4,2,1,5,6,3];
a.sort();
for (i=0; i<a.length; i++) {
    document.write(a[i], ",");      // => 1,2,3,4,5,6,
}

比較関数は,2引数 a,b をとって 正の値/0/負の値 のいずれかを返すように作る。

a > b正の値
a == b0
a < b負の値

連想配列

Array の添字に整数(インデックス)じゃなくて文字列(キー)を使うと連想配列になる。

var pets = new Array();

pets["Andy"] = "dog";
pets["Bill"] = "cat";
pets["Charlie"] = "elephant";

for (name i pets) {
    document.write(name, ": ", pets[name], "<br>");
}

こりゃ気持ち悪い。整数の添字と混ぜるとどうなるんだ?

var pets = new Array();

pets["Andy"] = "dog";
pets[1] = "cat";

for (name in pets) {
    document.write(name, ": ", pets[name], "<br>");
}

なんでもないかのように動く。
というか,pets[1](添字が整数)と pets[“1”](添字が文字列)を区別していないような感じ。

var pets3 = new Array();

pets3[1] = "dog";      // 整数で代入
document.write(pets3[1], "<br>");      // 整数で参照 => "dog"

pets3["1"] = "cat";      // 文字列で代入
document.write(pets3[1], "<br>");      // 整数で参照 => "cat"

やっぱり。