人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascriptでのソートを教えてください。

hoge['ringo'] = 200;
hoge['banana'] = 300;
hoge['mikan'] = 130;
hoge['budou'] = 300;

これをソートする方法を教えてください。
この他の場合でも使えるように
キーと値、文字と数値、昇順降順のそれぞれの方法をお願いします。

●質問者: worldtravel
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:BANANA hoge JavaScript ソート
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ElekiBrain
●27ポイント

やや邪道かも知れませんが prototype.js を使って簡単に実装する方法が以下に示されています。


『Marble Screw laboratoly』

http://skit.dip.jp/lab/js/order_by_column


実装には prototype.js をインクルードする必要があります。以下の一文をあらかじめ、他のスクリプトよりも前の行に入力してください。

<script type="text/javascript" language="javascript" src="prototype.js(パスを入力)"></script>
◎質問者からの返答

これってテーブルに入っていなければ行けないんですよね?

でもprototype.jsでこういう事が出来と言うことを知ることもできました。

ちょっと嬉しいです。

いつか使えるかな...?

ありがとうございました。

他の回答もお待ちしています。


2 ● ardarim
●27ポイント

純粋にJavaScriptのArray.sort()メソッドを使うのが良いと思います。一度使い方を覚えてしまえばキーと値、文字と数値、昇順降順、もっと複雑なソートでも比較関数を作りこめばいくらでもアレンジできます。

※ただし、hogeの配列構成は質問のものから変える必要があります


ここに簡単な説明があります。

http://www.tohoho-web.com/js/array.htm


サンプルです。

<html>
<head>
<title>Example</title>
<script type="text/javascript">
<!--
var hoge=new Array;
hoge[0] = new Object;
hoge[0].key='ringo';
hoge[0].value = 200;
hoge[1] = new Object;
hoge[1].key = 'banana';
hoge[1].value = 300;
hoge[2] = new Object;
hoge[2].key = 'mikan';
hoge[2].value = 130;
hoge[3] = new Object;
hoge[3].key = 'budou';
hoge[3].value = 300;

function compareKeyAscend(a, b){
 return a.key.localeCompare(b.key);
}
function compareKeyDescend(a, b){
 return b.key.localeCompare(a.key);
}
function compareValueAscend(a, b){
 return Number(a.value) - Number(b.value);
}
function compareValueDescend(a, b){
 return Number(b.value) - Number(a.value);
}
function test(sortfn){
 hoge.sort(sortfn);
 s="";
 for(i=0;i<hoge.length;i++){
 s=s+hoge[i].key+":"+hoge[i].value+"\r\n";
 }
 alert(s);
}
</script>

</head>
<body>






</body>
</html>


3 ● susie-t
●26ポイント

こんなのはどうでしょう。エラー処理とか手抜きですが・・・。

<html>
<head>
<title></title>
<script>
<!--
/**
 * sortObj 連想配列ソート関数
 * @obj 対象オブジェクト
 * @isKey true : キーでソート
 * false OR null : 値でソート
 * @isNumber true : 数値としてソート
 * false OR null : 文字列としてソート
 * @isDesc true : 降順ソート
 * false OR null : 昇順ソート
 */
function sortObj(obj, isKey, isNumber, isDesc){
 var ary = new Array();
 for(var i in obj){
 ary.push({key:i, value:obj[i]});
 }
 ary = ary.sort(sortFunc);
 var ret = new Object();
 for(var i = 0; i < ary.length; i++){
 ret[ary[i].key] = ary[i].value;
 }
 return ret;
 
 function sortFunc(left, right){
 var kv = (isKey) ? "key" : "value";
 var a = left[kv], b = right[kv];
 if(isNumber){
 a = Number(a);
 b = Number(b);
 }else{
 a = String(a);
 b = String(b);
 }
 if(isDesc){
 return a > b ? -1 : a < b ? 1 : 0;
 }else{
 return a < b ? -1 : a > b ? 1 : 0;
 }
 }
}

var hoge = new Object();
hoge['ringo'] = 200;
hoge['banana'] = 1300;
hoge['mikan'] = 130;
hoge['budou'] = 300;

var str = "";
var result = null;

str += "値 文字列 昇順>";
result = sortObj(hoge);
for(var i in result){
 str += i + ":" + result[i] + ",";
}
str += "<br/>";

str += "キー 文字列 昇順>";
result = sortObj(hoge, true);
for(var i in result){
 str += i + ":" + result[i] + ",";
}
str += "<br/>";

str += "値 数値 昇順>";
result = sortObj(hoge, false, true);
for(var i in result){
 str += i + ":" + result[i] + ",";
}
str += "<br/>";

str += "値 文字列 降順>";
result = sortObj(hoge, false, false, true);
for(var i in result){
 str += i + ":" + result[i] + ",";
}
str += "<br/>";
//-->
</script>
</head>
<body onload="document.getElementById('test').innerHTML = str;">
<div id="test"></div>
</body>
</html>
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ