dポイントプレゼントキャンペーン実施中!

ハッシュのキーをソートして取り出したいです。
perlで表現すると、以下の様なかんじです。
foreach $key (sort keys %hash) {
...
}

そこで、prototype.jsを使って以下の様に書いてみました。

<html>
<head>
<script type="text/javascript" src="prototype.js"></script>
</head>
<body >
<script >
var table = {c:'C', b:'B', a:'A'};
$H(table).keys().sort().each(function(key){
alert(key + ' ' + table[key]);
});
</script>
</body>
</html>

他に良い方法ありましたら、教えてください。

A 回答 (3件)

配列のsortをつかってみては?



<script >
var table = {c:'C', b:'B', a:'A'};
var newtable =new Object;
var keylist=new Array;
for(var i in table) keylist.push(i);
keylist.sort();
for(var i in keylist) newtable[keylist[i]]=table[keylist[i]];
for(var i in newtable) document.write(i+":"+newtable[i]);
</script>
    • good
    • 0
この回答へのお礼

yambejpさん
ご回答ありがとうございます。

提示して頂いた方法で簡素にできますね。

しかし、prototype.jsとの併用は出来ないみたいです。。

for(var i in keylist) がうまくいかないのかなぁ。

お礼日時:2009/04/23 18:18

最近のPrototype.jsはObject.prototypeにプロパティを追加しないと思います。



for(var i in keylist)がうまく動かなかったのは
Prototype.jsがArray.prototypeを拡張しているからでは無いですか?

keylistは配列なのですから、無難に
for(var i=0; i<keylist.length; i++)
の方が良い気がします。
    • good
    • 0
この回答へのお礼

Gottholdさん、ご回答ありがとうございます。

>keylistは配列なのですから、無難に
>for(var i=0; i<keylist.length; i++)
>の方が良い気がします。
たしかにそうですね。なっとくです。

お礼日時:2009/04/26 11:03

for(var i in keylist) がうまくいかないというのはこういうことでしょうか。



Prototype.js は Object.prototype に独自のプロパティを設置するタイプのライブラリだったと思います。

例えば、
javascript:
Object.prototype.hoge='foo';
var obj={'a':1};
for(var x in obj)alert(x+' : '+obj[x]);
というブックマークレットを実行すると、アラートは2回起こります。(a : 1 と hoge : foo です)

こっちだったら
javascript:
Object.prototype.hoge='foo';
var obj={'a':1};
for(var x in obj)if(obj.hasOwnProperty(x))alert(x+' : '+obj[x]);
アラートは1回だけです。(a : 1 だけ)


余談ですが、こういう意図しない弊害が出たりすることがあるので、Object.prototype を無闇に弄るのはやめましょう。
    • good
    • 0
この回答へのお礼

edvakfさん
ご回答ありがとうございます。

とても良いアドバイスで大変参考になりました。

お礼日時:2009/04/24 06:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!