1. ホーム
  2. javascript

[解決済み] オブジェクトの数をカウントするJavascript [重複]。

2023-01-06 05:16:11

質問

のようなオブジェクトがありますね。

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

これは私にとって少しトリッキーです。あなた方が助けてくれることを願っています。

どのように解決するのですか?

これを行う最も簡単な方法は、優れたパフォーマンスと新旧両方のブラウザとの互換性を持つ、次のいずれかを含めることです。 ローダッシュ または アンダースコア を追加してください。

次に _.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 に対して を示唆 Object.keys 新しいブラウザの場合 を提案しています。