JavaScriptで出現回数のカウントをする際のコード

今までこう書いてたのが
count[key] = count[key] ? count[key] + 1 : 1;


こう書けることが判明した。
count[key] = ++count[key] || 1;


コメント欄への回答
count[key]がNumberまたはundefinedであるとして、個人的には
count[key] = (count[key] || 0) + 1;
のほうが好みです。
JavaScriptでは問題ないとはいえ、言語によってはi = ++iの動作が未定義だったりするので。

前者の書き方とこの書き方は実は問題があって、Object.prototypeに定義されてるメソッドとハッシュのキー名がかぶるとおかしくなる。なので本当はcount.hasOwnProperty(key)でチェックするのが正しいのだけれど、出現回数のカウントごときでメソッド呼び出しとかしたくない。

その点、後者の書き方だと++count["toString"]が上手いことNaNになってくれるので、気にしなくて良い。ハッシュのキーにprefixつけてる前提ならどちらにしろ気にしないでいいけど。


WriteBacks

count[key] = count[key]++ || 1;
ではなく?
# 試してません。

Posted by at 2007/05/30 (Wed) 15:27:25

>count[key] = count[key]++ || 1;
横槍ですが。それだと ++ する前の値が返るので、要するにcount[key]==trueの時には
count[key] = count[key];
になってしまう罠。

Posted by undefined at 2007/05/30 (Wed) 22:38:43

count[key]がNumberまたはundefinedであるとして、個人的には
count[key] = (count[key] || 0) + 1;
のほうが好みです。
JavaScriptでは問題ないとはいえ、言語によってはi = ++iの動作が未定義だったりするので。

Posted by nanto_vi at 2007/05/31 (Thu) 01:15:30
TrackBack ping me at
http://la.ma.la/blog/diary_200705301141.trackback
Post a comment

writeback message: Ready to post a comment.







spam yoke. nanimo ireruna.