(続)iGoogle用ガジェット作成

以前に作ったiGoogle用のガジェットの続きをやりました。
with id:kyuumin
 http://d.hatena.ne.jp/h_gomi/20080405/1207388491

いつもと違って今日はGWでカフェが休み。
急遽自分のきたない部屋でやることに。

家にあった柏餅やくっきーを食べながら、
食べ物に関してはカフェにまけなかった。

で、本題のできたガジェットのxmlはこちら
 http://hisae.gomi.googlepages.com/lottery.xml

前回、ソートがおかしかった&IE7で動かなかったのを
なおしました。あとは、ガジェットの属性情報を少し付加。

ただし、ソースがイマイチ。
JavaScriptの動作が思ったようにいかなくて、
無理やりなコードになっている部分が。。。

では、以下今日の発見。

数値はオブジェクトじゃない

rubyだと当たり前に 1.to_s
とか書いちゃっているけど、JavaScriptではだめでした。
そんなときは一度変数に入れましょう。

var i = 1;
i.toString()

JavaScriptのハッシュ

JavaScriptのハッシュはかなり不思議でした。
Arrayがハッシュに早変わりするのです。
そして、思ったように動きません。。
まず、ハッシュを使いたかったら、Arrayをnew。
そして添え字を文字列にすればハッシュのような動きになります。

var winners = new Array();
winners["a"]=12
winners["b"]=4
alert(winners["a"]);

で、これで最初使える!と思ったのですが、
落とし穴が2つ。

長さが測れない

winners.length

添え字に文字列を使っていると(=ハッシュとして使っていると)、
とやっても数字が取れません。。。
そもそも、lengthってこんなことにもなっちゃうのでした。

var winners = new Array();
winners[0]=12
winners[4]=4
alert(winners.length);

この結果はなんだと思います?
なんと5なのです。
整数の添え字の一番大きいもの+1になるらしい。
これでは、配列やハッシュの長さが測れません。
直感と違いすぎる。

ハッシュの時はソートが効かない

var winners = new Array();
winners["a"]=12;
winners["b"]=4;
function hikaku(a, b) { return(a - b); };
alert(winners.sort(hikaku))

こんな感じのコードだとalertの結果は空白。

    • -

ということで、それらを回避するため、若干あやしいコードが混じっています。
もっといい書き方があるような気がするけど、今日は時間切れでした。

    • -

最後に、前回コメントをくれた
id:chris4403さん
ありがとうございました。