web-dev-qa-db-ja.com

オブジェクト内のオブジェクトの数をカウントするJavascript

私は次のようなオブジェクトを持っています:

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

これは私にとって少し難しいです。皆さんが助けてくれることを願っています。

75
Bryan Learn

これを行う最も簡単な方法は、優れたパフォーマンスと古いブラウザーと新しいブラウザーの両方との互換性を備えた、ページに 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を提案する に感謝します。

106
Michael Geary

最近のブラウザでは次を使用できます:

Object.keys(obj.Data).length

MDN を参照してください

古いブラウザの場合は、Michael Gearyの回答でfor-inループを使用してください。

59
Barmar

ここでデモ を試してください

var list ={}; var count= Object.keys(list).length;
26
Sudarshan