// Copyright (c) 1999 M.Inamori,All rights reserved. // Coded 11/9/99 // // sort_keys(ary [, sort_func]) // // 引数の配列(オブジェクト)のインデックス(プロパティ)を // 並べ替えて取り出せるようにするオブジェクトを生成します。 // 特にオブジェクトを連想配列的に用いるときに有効です。 // 例えば次のように使います。 // //var m = new Array(); //m["さくら"] = "撫子"; //m["知世"] = "園美"; //m["桃矢"] = "撫子"; // //var c = new sort_keys(m); //for(; !c.atEnd(); c.moveNext()) // WScript.Echo(c.Value + "'s mother is " + m[c.Value]); // //mのインデックス(キー)で並べ替えて処理しています。 //c.Valueでインデックスを参照できます。 //次のインデックスを参照したい場合は、c.moveNext()とします。 //c.atEnd()で終わりまで到達したかを判定します。 //mは配列である必要はなく、空のオブジェクトを使ってもよいです。 //JScript3以上なら、次のようにするときれいでしょう。 // //var m = new Object(); function sort_keys() { var arg = sort_keys.arguments; var ary = arg[0]; this.ary = new Array(); var index = 0; //aryの添え字をthis.aryに入れる for(var prop in ary) if(prop != "length") //最近はこれいらない this.ary[index++] = prop; //this.aryをソート if(arg.length == 1) this.ary.sort(); else if(arg.length == 2) //2つ目の引数は関数への参照 this.ary.sort(ary, arg[1]); else WScript.Quit(); //この辺は適当に変更 this.Value = this.ary[0]; this.index = 0; this.moveNext = new Function("this.Value = this.ary[++this.index]"); this.moveFirst = new Function("this.Value = this.ary[this.index=0]"); this.atEnd = new Function("return this.index >= this.ary.length;"); }