私は次のようなオブジェクトを持っています:
Object {0=Object, 1=Object, 2=Object} // Output from console.log(obj.Data);
しかし、オブジェクト内のオブジェクトの数を数え、最終的にサブオブジェクトから属性値を取得する方法はありません。
私が試してみました
console.log(obj.Data[0].length); // It does not work
console.log(obj.Data.length); // It does not work
これは私にとって少し難しいです。皆さんが助けてくれることを願っています。
これを行う最も簡単な方法は、優れたパフォーマンスと古いブラウザーと新しいブラウザーの両方との互換性を備えた、ページに Lo-Dash または nderscore を含めることです。
その後、_.size(object)
または_.keys(object).length
のいずれかを使用できます
obj.Data
については、次を使用してこれをテストできます。
console.log( _.size(obj.Data) );
または:
console.log( _.keys(obj.Data).length );
Lo-DashとUnderscoreはどちらも優れたライブラリです。コードでどちらかが非常に役立つことがわかります。 (これらは互いにかなり似ています。Lo-Dashは、いくつかの利点がある新しいバージョンです。)
あるいは、この関数をコードに含めることもできます。この関数は、オブジェクトのプロパティを単純にループしてカウントします
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 を設定しました。テストに追加するのに便利なブラウザで実行してください。
Barmar for 新しいブラウザのObject.keys
を提案する に感謝します。
最近のブラウザでは次を使用できます:
Object.keys(obj.Data).length
MDN を参照してください
古いブラウザの場合は、Michael Gearyの回答でfor-in
ループを使用してください。
ここでデモ を試してください
var list ={}; var count= Object.keys(list).length;