IT戦記 - Perl で再帰呼出し時のスタック間データ共有を読んだ時点では気づきもせず、Kazuho@Cybozu Labs: JavaScript で Generic Programming にいたってようやく思い当たったのだが、Ruby の Enumerable#inject や Python の reduce というのはこういうときに使うものなのかもしれない。 // requires Prototype.js function count_tags(node) { return $A(node.childNodes).inject({}, function (tag, kid) { if (kid.nodeType != 1) return tag; tag[kid.nodeName] = (tag[kid.nodeName] || 0) + 1; return $A(kid.ch