トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
JScript
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ 連想配列(Hash)








  DESC
    任意の値( Val )を任意の文字列( Key )に動的に関連つけるデータ構造
    添字演算子を使用すると
    オブジェクトは "連想配列" 扱いになる

___

■ Objectを連想配列として使う

JScript の Object 型は、動的にメンバの追加、削除ができる。 これを利用して連想配列を実装する。
    var tbl = {};

    // name プロパティに "test"
    tbl.name = "kato";

    // age プロパティに 10 をセットする
    tbl.age = 10;

    // 上書きする
    tbl.age = 20;

    // プロパティの値に配列オブジェクト参照させる
    tbl.friend = [ "taro", "hanako", "goro" ];

    // プロパティの値に別のオブジェクト参照させる
    tbl.family = { father : "taro", mother : "hanako" };


プロパティを参照するには for - in を利用する
    for( key in tbl ){
      WScript.Echo( key + "   " + tbl[key]);
    }
___

■ プロパティに使える値

プロパティ名には数値を含む、任意の文字が使える。
    tbl.test = "a";
    tbl.0 = "1";
    tbl.key0 = "b";
添字演算子 [] を使えば、任意の式の値をプロパティ名に使える。 プログラム内で動的に決まる値をキーの名前にするときに使うと便利。
    tbl[ "test" ] = 10;
    tbl[ func() ] = 10;

    tbl[ 10 + 2 ] = 10;

    obj = {};
    tbl[ obj ] = 10;

WARNING 添字演算子をつかった場合は、すべてのプロパティは文字列として変換される。 そのため Object をキーとして利用する場合は注意が必要。
    objA = { age  : 10 };
    objB = { name : "b" };

    tbl[ objA ] = 10;

    // ここで上書きされる( objA と objB は文字列表現が同じ  )
    tbl[ objB ] = 20;

文字列をキーとして利用するのが無難
    tbl[ "objA" ] = 10;
    tbl[ "objB" ] = 20;

  // この書き方は OK
  var a = new Array();
  a[ "key" ] = "val";

  var dic = new Object( 
       {  
          H:"Hokkaido", 
          T:"Television",
          B:"Broadcasting"  // WARNING 最後の[,] はコンパイルエラー
       }
  );


  // WARNING
  //  数値に変換できる文字を KEY にすると、数値で参照できる
  a[ "0" ] = "val_0";

  // val
  print( a["key"] );
  

  tbl = { a:"foo", b:"goo" };
  WScript.echo( tbl.a );
  WScript.echo( tbl["a"] );


___

■ Object

    // Key をかえす
    for ( i in aa ) print( i + aa[i] );

    var o = new Object();

    // Property の追加 ( 名前は任意 )
    o.a = "val1";
    o.b = "val2";
    o.c = "val3";

    // Array も Object 扱い
    //    key == index

    // RET
    //    0 "a"
    //    1 "b"
    //    2 "c"
    a = ["a", "b", "c" ];
    for ( attr in a ) print( attr + " " + a[attr] );
// // Object の Property を取得する // Property 名がわからないときにこれを使う for ( attr in o ) print( attr + o[attr] ); var fs = new ActiveXObject("Scripting.FileSystemObject"); var d = fs.GetFolder ( "c:/Documents and Settings/" ); print( d.Name ); // 組み込み Object はだめ for ( i in d ) print( i + d[i] );
    if (1)
    {
      a = [ "obj_10", "obj_00", "obj_01" ];
      var aSort = new Array;


      for( i=0; i< a.length; i++ ){

        s = a[i];

        var num = s.split("_")[1];
        num = parseInt( num );

        // obj{ 10, obj10 }
        var obj = new Object;

        obj.num = num;
        obj.name = s;              // obj10

        // 追加
        aSort.push( obj );
      } 


      for( i=0; i< aSort.length; i++ ){
        print( "before " + aSort[i].num + " " + aSort[i].name );
      }

      /*
        a = [ 
        { 10, obj10 },
        { 1, obj001 },
        { 2, obj2 },
        ]
      */


NINJAIDX 1