新JavaScript入門  JavaScript,Neo-Generation  DOM  WSH  掲示板  表紙
5.配列(1)  7.ページを作る 
新JavaScript入門
6. 配列(2)
多次元配列
配列の各々要素を配列にすることにより二次元配列を作ることができます (配列の配列だから正確には二次元配列ではありませんが)。
    var a = new Array();
    a[0] = new Array();     //配列の各要素が
    a[1] = new Array();     //それぞれ配列
    a[1][3] = 4;            //配列にアクセスできる
    a[2][2] = 5;            //これはエラー
 
次の例は、
    ai,j = ai-1,j + ai,j-1
    ai,0 = i  a0,j = j
 
を解いたものです。
    function test4(form) {
        var a, i, j;
        a = new Array(10);          //長さ10の配列を作る
        for(i = 0; i < 10; i++)     //各々の要素に配列を割り当てる
            a[i] = new Array(10);
        for(i = 1; i < 10; i++)
            a[i][0] = i;
        for(j = 1; j < 10; j++)
            a[0][j] = j
        for(i = 1; i < 10; i++)
            for(j = 1; j < 10; j++)
                a[i][j] = a[i-1][j] + a[i][j-1];
        form.text1.value = "" + a[9][9];
    }
 
a9,9 =
意外と大きな値になってしまいました。確認するには を押してください(参照 ページを作る)。
配列の初期化
Cと同じように要素を並べることによって配列の初期化ができます。
    a = new Array("さくら", "知世", "ケロちゃん");
    form.text1.value = a[0];        //"さくら"と表示
 
a.length は3となります。
次のようにもできます。
    a = ["さくら", "知世", "ケロちゃん"];
 
詳しくは、こちら
配列オブジェクトのメソッド
以下に挙げるメソッドは IE では4以上でサポートされています。
Array 型オブジェクトのメソッドを使うと、 次のようなことができます。
    function test2(form) {
        var a, sztmp;
        sztmp = form.text1.value;
        a = sztmp.split(",");         //カンマ区切りで配列にする
        a.sort();                     //昇順でソート
        a.reverse();                  //配列の並びを逆転
        form.text1.value = a.join();  //配列をカンマで繋げて表示する
    }
 
テキストボックスに数字をカンマ区切りで入力してボタンを押してください。 数字がカンマ区切りで降順に並べられます。
sort
配列を昇順に並べ替えます。文字列ならコード順に並べ替えます。
    var a = new Array(5, 2, 3);
    a.sort();                   //昇順にソート
    alert(a[0] + "," + a[1] + "," + a[2]);
 
上の例は引数を省略した時です。 Cのqsortと同様に配列の要素を比較する関数を引数に指定することも可能です。
    function test3(form) {
        var p, i;
        
        p = new Array(6);
        p[0] = new Person("さくら", 30);
        p[1] = new Person("知世", 100);
        p[2] = new Person("小狼", 99);
        p[3] = new Person("千春", 90);
        p[4] = new Person("奈緒子", 90);
        p[5] = new Person("利佳", 95);
        p.sort(cmp_point);          //pointでソートする
        
        //名前だけの配列を作って表示する
        q = new Array(6);
        for(i = 0; i < 6; i++)
            q[i] = p[i].name;
        form.text1.value = q.join();
    }
    
    function Person(name, point) {
        this.name = name;
        this.point = point;
    }
    
    //pointを比較する関数
    function cmp_point(a, b) {
        return b.point - a.point;
    }
 
point の大きい人の名前から順に並べられます。
qsortの引数の関数をf(a, b)とすると、
返す値並び
a b
0不変
b a
という規則で並び替えられます。基本的には、昇順なら a の方から b の方を引く、 降順なら b の方から a の方を引く、と覚えておけばよいでしょう (参照
ユーザー定義オブジェクト)。
注意!
Netscape Navigator 4.04 では、同得点の「千春」と「奈緒子」 の並びが入れ替わってしまいます。すなわち、この sort メソッドはいわゆる「安定でない」ソートです。 Internet Explorer 4.0 は「安定な」ソートです。
reverse
配列の順序を逆にします。
    a = new Array("ウィンディ", "ウッド", "ジャンプ");
    a.reverse();
    form.text1.value = a.join();    //"ジャンプ,ウッド,ウィンディ"
 
join
配列を繋げて文字列にします。
    a = new Array(1, 2, 3);
    form.text1.value = a.join(" ほえ ");    //"1 ほえ 2 ほえ 3"
 
引数の文字列で配列を繋げて文字列にします。 引数が省略された場合はカンマ(",")で繋がります。
これと対になるものが文字列オブジェクトの splitメソッドです。
    sztmp = "ウィンディ,ウッド,ジャンプ";
    a = sztmp.split(",");
    alert(a[2]);        //"ジャンプ"と表示
    a = sztmp.split();
    alert(a[0]);        //"ウィンディ,ウッド,ジャンプ"
 
引数の文字列で文字列を分解し、配列を生成します。 引数が省略された場合は、要素がその文字列だけになる長さ1の配列になります。
Written 10/13/97
Modified 4/6/03
first, prev, next, exit