it-swarm.com.de

Javascript zählt die Anzahl der Objekte im Objekt

Ich habe ein Objekt wie:

Object {0=Object, 1=Object, 2=Object} // Output from console.log(obj.Data);

Es gibt jedoch keine Möglichkeit, die Anzahl der Objekte in object zu zählen und dann den Attributwert von den Unterobjekten zu erhalten.

Ich habe versucht

console.log(obj.Data[0].length); // It does not work

console.log(obj.Data.length); // It does not work

Das ist ein bisschen schwierig für mich. Hoffe ihr könnt helfen.

75
Bryan Learn

Der einfachste Weg, dies mit hervorragender Leistung und Kompatibilität mit alten und neuen Browsern zu tun, besteht darin, entweder Lo-Dash oder nderscore in Ihre Seite aufzunehmen.

Dann können Sie entweder _.size(object) oder _.keys(object).length verwenden

Für Ihren obj.Data Können Sie dies testen mit:

console.log( _.size(obj.Data) );

oder:

console.log( _.keys(obj.Data).length );

Lo-Dash und Underscore sind beide hervorragende Bibliotheken. Sie würden entweder eine sehr nützlich in Ihrem Code finden. (Sie sind einander ziemlich ähnlich; Lo-Dash ist eine neuere Version mit einigen Vorteilen.)

Alternativ können Sie diese Funktion in Ihren Code einfügen, der einfach die Eigenschaften des Objekts durchläuft und sie zählt:

function ObjectLength( object ) {
    var length = 0;
    for( var key in object ) {
        if( object.hasOwnProperty(key) ) {
            ++length;
        }
    }
    return length;
};

Sie können dies testen mit:

console.log( ObjectLength(obj.Data) );

Dieser Code ist jedoch nicht so schnell wie in modernen Browsern. Für eine Version, die in modernen Browsern viel schneller ist und in alten Browsern noch funktioniert, können Sie Folgendes verwenden:

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;

und wie bisher testen mit:

console.log( ObjectLength(obj.Data) );

Dieser Code verwendet Object.keys(object).length in modernen Browsern und greift auf das Zählen in einer Schleife für alte Browser zurück.

Aber wenn Sie diese ganze Arbeit machen wollen, würde ich empfehlen, stattdessen Lo-Dash oder Underscore zu verwenden und alle Vorteile zu nutzen, die diese Bibliotheken bieten.

Ich habe ein jsPerf, das die Geschwindigkeit dieser verschiedenen Ansätze vergleicht eingerichtet. Bitte führen Sie es in allen Browsern aus, die Sie für die Tests zur Verfügung haben.

Vielen Dank an Barmar für schlägt Object.keys Für neuere Browser vor in seiner Antwort.

106
Michael Geary

In neueren Browsern können Sie Folgendes verwenden:

Object.keys(obj.Data).length

Siehe MDN

Verwenden Sie für ältere Browser das for-in Schleife in Michael Gearys Antwort.

59
Barmar

Versuchen Sie Demo hier

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