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


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

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

回答の条件
  • 1人2回まで
  • 登録:2006/08/14 15:25:34
  • 終了:2006/08/21 15:30:03

回答(3件)

id:ElekiBrain No.1

ElekiBrain回答回数255ベストアンサー獲得回数152006/08/14 17:46:22

ポイント27pt

やや邪道かも知れませんが 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>
id:worldtravel

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

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

ちょっと嬉しいです。

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

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

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

2006/08/15 18:01:59
id:ardarim No.2

ardarim回答回数896ベストアンサー獲得回数1442006/08/15 02:08:52

ポイント27pt

純粋に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>

id:susie-t No.3

susie-t回答回数99ベストアンサー獲得回数182006/08/15 10:58:21

ポイント26pt

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

<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>

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • JavaScript JavaScript 2006-08-18 14:37:10
    [ Javascript ] 辞書配列の Key を取り出す JavaScript ではてなブックマーク数を表示 JavaScriptを最速で実行できるブラウザはどれ? Operaユーザーは「DivX Stage6」を楽しむためにUser Javascriptを JavaScript
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません