オブジェクトのキーやプロパティの数をカウントする最速の方法は何ですか? オブジェクトをイテレートせずにカウントすることは可能でしょうか?
var count = 0;
for (k in myobj) if (myobj.hasOwnProperty(k)) count++;
(Firefox は魔法の __count__
プロパティを提供していましたが、バージョン 4 の頃に削除されました)
これを行う方法は知りませんが、反復作業を最小限に抑えるために、__count__
の存在を確認し、存在しない場合 (つまり、Firefox ではない場合) は、オブジェクトを反復して、後で使用するために定義することができます。
if (myobj.__count__ === undefined) {
myobj.__count__ = ...
}
この方法では、__count__
をサポートしているすべてのブラウザがそれを使用し、イタレーションはサポートしていないブラウザに対してのみ実行されます。もしカウントが変わってしまってこれができない場合は、いつでも関数にすることができます。
if (myobj.__count__ === undefined) {
myobj.__count__ = function() { return ... }
myobj.__count__.toString = function() { return this(); }
}
このようにして、myobj.__count__
を参照すると、いつでも関数が起動して再計算されます。