(続)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さん
ありがとうございました。