|
||||||||||||||||||||||||||||||||||||||||||||||||
JavaScriptでは可変index番号をキーにもつ普通の配列はソートできますが、連想配列はソートできません。
また、連想配列の場合は配列の長さもlengthで取る事はできません。 自分であれこれ書くのが面倒な方 =>>> 連想配列の操作用関数
var aTest = new Array(); aTest['ccc'] = 8; aTest['aaa'] = 4; aTest['ddd'] = 9; aTest['bbb'] = 4; aTest['eee'] = 1; /*または オブジェクトとして */ var aTest = {'aaa':4,'bbb':4,'ccc':8,'ddd':9,'eee':1} /* 長さを取るだけ */ var i = 0; for( key in aTest ){ i++; } /* keyと言う文字は任意の変数名 */ alert(i) /* ソートする準備 新配列作成*/ var aSIN = new Array(); for( var i in aTest ){ aSIN.push({key:i,val:aTest[i]}); } /* 別の書き方をすれば */ var aSIN = new Array(); var t = 0; for( var i in aTest ){ aSIN[t] = new Object(); //new Array()でもほぼ同じ sSIN[t].key = i; aSIN[t].val = aTest[i] t++; }
これで、aSIN[番号]として現在の並び順の情報も持っていますし、長さlengthプロパティもaSINが持っています。 indexも無くキーで値を照会するのみ。
/* 配列の長さ */ alert( aSIN.length ) /* 配列全体を処理たい場合 (例:並び順をチェック) */ for(i=0; i<aSIN.length; i++){ alert(aSIN[i].key + ' = ' + aSIN[i].val + '\n' ) } /* キー ソート (キーが小さい順) */ aSIN.sort(smallKey); function smallKey(a,b){ return (a.key > b.key) ? 1 : -1 ; } /* キー ソート (キーが大きい順) */ aSIN.sort(largeKey); function largeKey(a,b){ return (a.key < b.key) ? 1 : -1 ; } /* バリュー ソート (値が小さい順) */ aSIN.sort(smallVal); function smallVal(a,b){ return (a.val > b.val) ? 1 : -1 ; } /* バリュー ソート (値が大きい順) */ aSIN.sort(largeVal); function largeVal(a,b){ return (a.val < b.val) ? 1 : -1 ; } これでaTestとaSINがあれば、『キーからの参照』『長さ』『並べ替え』ができる使いやすい状態になります。 必要に応じて処理後に元の配列の形態(キー&バリューのペア)に戻す場合は var bTest = new Array(); for( var i=0; i < aSIN.length; i++ ){ bTest[aSIN[i].key] = aSIN[i].val; } 商品リスト等の場合はユニークである商品番号を配列のキーにしてしまう場合がありますが、 配列は長さを返す時に空要素の物も含めて一番大きいインデックス番号+1を返してきます。 また、配列(Array)で作成してしまうと、思わぬ落とし穴(数値キーはindexとして扱われる)があります。 商品番号をキーにする場合は必ず new Object()か ary = {} という形で初期オブジェクトを作ってください。 new Array()や ary = [] では作成しないように。 同時に配列の作成時に普通のインデックスを持つ配列を親にしたソート用配列も作っておけば、 あとからfor()文を回して余計な手間をかけるよりも便利です。
後日情報として: 配列ソートの最下部にあります。 |
専用ページから申し込むと So-netより高い3万円CB
案ずるより産むが易し
使ってみれば疑問も解決 XREA+ (plus) 206円/月 ( お試し7日間 ) CORE SERVER 428円/月 ( お試し15日間 ) ロリポップ 270円/月 ( お試し期間10日間 ) ヘテムル 1620円/月 ( お試し期間15日間 ) さくら 129円/月 ( お試し期間2週間 ) |
|||||||||||||||||||||||||||||||||||||||||||||||