Hash連想配列はそのままではソートができないので、普通の配列の親を作ってその子供(プロパティ)化けてソートします。同じような式を使う物なので、使っていた物を掲載しておきます。DOM時代に入ってからはXMLも含めてオブジェクトを扱う事が非常に多いので、コアのArrayオブジェクトに用意されていても良さそうな物ですが・・・・。特定のプロパティを指定して、それを基準にソートする事も可能です。ベタな関数なので、もっと良い物があればそっちを使ってください。連想配列のソートの仕方を参照。ソースファイルソースはエラーチェックなしの物と、エラーチェックありの物があります。エラーチェックで倍のデータ量になるので両方置きました。どちらでも使いやすい方を。(ちなみに私は完成までエラーチェックあり、完成後に置き換えています。WindowsのShift_JIS記述です。使用するスクリプトよりも先に外部ソースファイルとして読み込ませてください。関数内に記述してローカル変数(オブジェクト)として読み込ませる事もできます。いうオブジェクト名しかグローバルでは使っていませんので、他のプログラムと干渉しにくいはずです。部分Hashと言う名前が他の変数や関数名とぶつかる場合は別の名前に変更可能です。次のようなメソッドを持たせてあります。ソート)、の方法があります。valueのペアを保持したまま正反対の並び順に並べ替えます。Hash.grep(Array,/^regs/,'val')typeは与えられたオブジェクトの'key'か'val'の対象を指定。Hash.length(Array)空要素まで含めた長さを示す数が数値型で戻ります。Hash.list(Array,'val')キーだけ、要素だけ、の配列(indexを持つ普通の配列)を返してきます。key(固定プロパティ名)とval(固定プロパティ名)になったもの。基本的に内部用関数で、外からも一応使えるようにしてあるだけです。いう単純な連想配列に戻します。'zzzz';にした配列を返します。toIndextypeの逆処理です。Hash.property(Array);とする事で自分に返す、または新しい配列を作る形で使います。Arrayやオブジェクトにprototypeでメソッドを埋め込むと、連想配列のキーと干渉するのでこうしてあります。H.s()の様に縮めて使えます。オブジェクトのバリューソート。戻り値を格納する変数を引数のオブジェクトと同じにすれば配列がソートされて自分自身に戻ります。別変数にすればソート後の別の新配列(オブジェクト)となります。スイッチを設定する場合は、比較対象指定は完全省略はできません。これは空を渡すので大丈夫。Hash.kvsort(bTest['aaa']['ccc'],'key');の様にそのオブジェクトを指定する事で、その部分だけがソートされます。元のオブジェクトに戻せば、多重配列のその部分だけがソート済になります。Hash.kvsort(bTest.aaa.cccc,'key');でもJavaScriptのオブジェクト・プロパティ記述に沿うので当然同じ意味です。ある特定の深度の特定のバリューを比較対象として上層の配列をソートする事ができます。等)こういう場合は比較要素にその比較する対象のバリューを指定してください。gen2の下位にオブジェクトを要素として持つ配列があり、さらにその下層の["cat2"]["female"]が持つ固定値を参考に並べ替えると言う事になります。この場合gen2の直下にあるオブジェクトは全てその下層に["cat2"]["female"]というオブジェクトを持っていなければソートは無理です。bTestと言う多重配列はbTest['gen2'][0]["cat2"]["female"]と表現できる値を持っていると言う事です。0の層の配列をソートしてる事になります。言う指定方法になり、並べ替える場所は当然固定できないので指定には含まれないので使い方に注意。これは配列の構造が頭に入っていないと指定が難しいケースが多いです。うちで配布してる連想・多重配列のテーブルビュアーやツリービュアーなどで構造確認してください。注意:この対象指定方法やバリューソートの場合は、比較対象がオブジェクトだとソートする度に順序が入れ替わる可能性があります。』と言う文字を返すので判断ができない為です。◆スイッチについてスイッチは、バリューソートで普通の配列が紛れ込んでいる時に基本的に使います。多重配列の場合、特定の深度が連想配列・オブジェクト以外の普通の配列になっている場合もあります。コンストラクタとキーを調べて自動判定をしています。自動判定ではキーが全て数値のみのでコンストラクタがArrayの連想配列は普通配列として扱ってしまいます。Hash.kvsort(ary,'',true)とスイッチを指定する事で、この混乱を避ける事が出来ます。確実にオブジェクトとして扱われるのでスイッチの必要はありません。同じ物の様に扱われてるので、このスイッチを付けました。コンストラクタの違いと、数値のみのキーのケースの扱いが違う事以外は、見た目は同じですからね。連想配列はコンストラクタArrayでは作らない癖をつける必要があります。配列のソート余談:キーに数値以外を持つオブジェクトにfalseのスイッチを付けてしまった場合は、キー&バリューのペアの保持が壊れます。キーの数値&バリューのペアが固定化され保持されるオブジェクトに生まれ変わります。キーソートの時はこのスイッチは何を付けても無意味です。キーソートとは連想配列に行う処理ですから、必ずtureが設定されている物として扱われます。)連想配列をリバース。連想配列やオブジェクトの場合は単純なリバースです。連想配列も一応定義された順に並んでいるので、キー&要素のペアが保持された状態でリバースされます。Hash.reverse(bTest.ddd)普通の配列か連想配列・オブジェクトであるかどうかは自動的に認識します。kvsortと同じで、キーが数値のみの連想配列の場合は、オブジェクトである事を指定する必要があります。明示的に普通配列として扱う指示kvsortの説明を読んでください。基本は省略できますが、コンストラクタによっては混同されるのでそれを防ぐ為のスイッチです。正確に作られている配列・オブジェクトの構成であればスイッチは不要です。可変インデックス(普通配列)なので、キーは変らずそのバリューである下層の値が入れ替わります。Hash.kvsort(Object[1]);これはオブジェクトですのでキー部分とその値(下層)が一緒にリバースされます。[,type])オブジェクト、パターンは必須項目です。typeは省略した場合と'val'はバリューのマッチングを行い、'key'を指定するとキーのリストでマッチングを行います。match用パターンは、文字列や変数、/^aaa/、の様なmatchで使える物です。省略した場合はエラーは出ませんが、元の配列が戻るだけです。与えられたオブジェクトのキーとバリューを調べてパターン(RegExp、文字列(文字・数値など))にマッチする物だけ取り出します。grepは与えられた配列の中からマッチする物を探すので、引数のオブジェクトが固定要素などを指す物であった場合は対象外となります。バリューを調べる場合は、引数のオブジェクトの指す配列の要素が更にオブジェクトであった場合は当然文字列ではないのでマッチしません。typeofの結果がobjectの物をピックアップするようになています。』と言う文字列検索ができない事を同時に意味します。戻り値の配列には、その指定した深さ(オブジェクト)の下層のみが入ります。部分切り出しで新たな配列にする物なので、親の深度情報は当然含まれません。大元の多重配列の中での正確な位置情報となります。catはgen2[0]の要素に見えるが、gen2[0]の要素であるオブジェクトの中のキーの1つでしかない。従って指定はvalではなく当然keyでgrepしなければ駄目。Hash.list(Object[0],'key');キーは文字列なので普通配列で、値が文字列の配列ができます。Hash.list(Object[0],'val');この例ではバリューがオブジェクトなので、そのオブジェクトを要素とする普通配列ができます。Hash.toIndextype(Array)これは基本的にHashオブジェクトの中の内部関数です。一応外から使えるようになっているだけです。言う形になっています。key指定でvalueを取り出すのには便利ですが、ソートができません。親配列を作ってその子に入れ込む事でプロパティ参照でsortができます。})と言う方法でソートが可能です。これを元のペア型のオブジェクトに戻せば並び順を変えられます。連想配列のソートHash.kvsortは単純に言えば内部でこの順序で処理をしているだけです。}という単純な式ですみますので、わざわざHashオブジェクトを使う必要はないです。Hash.toHashtype(Array)Hash.toIndextypeで作った形を、元の連想配列、またはオブジェクトに戻します。いう連想配列・オブジェクトに戻します。連想配列、オブジェクトどちらかを指定できます。基本は省略で、オブジェクトになります。Array.sort()できたはずですので、不要なスイッチとも言えますが。Array();と言うコンストラクタの違う連想配列になります。)無駄な高額ドメイン管理料金払ってませんか?バリュードメインムームードメインお客さんに振込手数料を払わせていませんか?イーバンク銀行同士なら振込手数料無料。配布素材以外のコンテンツの無断使用・転載を禁じます。