優れたパフォーマンスと古いブラウザと新しいブラウザとの互換性を備えた最も簡単な方法は、ページにLo-DashまたはUnderscoreのいずれかを含めることです。あなたはobj.Data
について_.size(object)
または_.keys(object).length
のいずれかを使用することができます
次に、あなたがこれをテストできます。
console.log(_.size(obj.Data));
か:
console.log(_.keys(obj.Data).length);
LO-ダッシュとアンダースコアは、両方の優れていますライブラリ;いずれかがコード内で非常に便利であることがわかります。 (彼らはお互いにかなり似ています。LO-ダッシュは、いくつかのadvantangesと新しいバージョンです。)
また、あなたは、単にオブジェクトのプロパティをループし、それらをカウントし、あなたのコードでこの関数を含めることができます
function ObjectLength(object) {
var length = 0;
for(var key in object) {
if(object.hasOwnProperty(key)) {
++length;
}
}
return length;
};
あなたはでこれをテストすることができます。コードは早く、それはしかし、最近のブラウザで可能性としてはないことを
console.log(ObjectLength(obj.Data));
。最近のブラウザでははるかに高速だと、まだ古いもので動作するバージョンについては、あなたが使用することができます。
function ObjectLength_Modern(object) {
return Object.keys(object).length;
}
function ObjectLength_Legacy(object) {
var length = 0;
for(var key in object) {
if(object.hasOwnProperty(key)) {
++length;
}
}
return length;
}
var ObjectLength =
Object.keys ? ObjectLength_Modern : ObjectLength_Legacy;
前と同様に、とそれをテスト:
console.log(ObjectLength(obj.Data));
このコードは、現代のブラウザでObject.keys(object).length
を使用し、古いブラウザのループでカウントに戻ります。
しかし、あなたがこのすべての作業に行くなら、私は代わりにLo-DashまたはUnderscoreを使用し、それらのライブラリが提供するすべての利点を得ることをお勧めします。
jsPerf that compares the speed of these various approachesを設定しました。テストに追加するのに便利なブラウザで実行してください。
Barmarありがとうございました。回答はsuggesting Object.keys
for newer browsersです。あなたが使用することができ、最近のブラウザで
を試してみてください、あなたは完全なオブジェクトを投稿してくださいだろうか? –
なぜこのようにオブジェクトを使用していますか?あなたの質問には多くのことを考慮する必要があります。プロパティの種類、列挙可能なもの、プロトタイプをここに混乱させる方法などを理解する必要があります。なぜ配列を使用しないのですか? – Sacho
このqが重複とマークされていても、最初に尋ねられた質問に示された解決策がここで受け入れられた回答がより簡単に機能します。 –