2921 Stimmen

Länge eines JavaScript-Objekts

Ich habe ein JavaScript-Objekt. Gibt es eine eingebaute oder akzeptierte bewährte Methode, um die Länge dieses Objekts zu ermitteln?

const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;

1 Stimmen

@neitony - das ist irgendwie wahr, aber so viele Leute sind an PHP's "assoziatives Array" gewöhnt, dass sie annehmen könnten, es bedeutet " bestellt assoziative Karte", wenn JS-Objekte in der Tat ungeordnet sind.

4 Stimmen

In dem obigen Beispiel ist myObject.length undefiniert, zumindest in einer Browserumgebung. Deshalb ist es ungültig, @AdrianM

3 Stimmen

Varianten von Object. { keys , values , entries } (obj).length wurden nun insgesamt 38 Mal in 16 Antworten und in den Kommentaren zu dieser Frage erwähnt, und weitere 11 Mal in 7 gelöschten Antworten. Ich denke, das ist jetzt genug.

22voto

Ally Punkte 4536

Hier ist eine völlig andere Lösung, die nur in moderneren Browsern funktioniert (Internet Explorer 9+, Chrome, Firefox 4+, Opera 11.60+ und Safari 5.1+)

Ver dieses jsFiddle .

Richten Sie Ihre assoziative Array-Klasse ein

/**
 * @constructor
 */
AssociativeArray = function () {};

// Make the length property work
Object.defineProperty(AssociativeArray.prototype, "length", {
    get: function () {
        var count = 0;
        for (var key in this) {
            if (this.hasOwnProperty(key))
                count++;
        }
        return count;
    }
});

Nun können Sie diesen Code wie folgt verwenden...

var a1 = new AssociativeArray();
a1["prop1"] = "test";
a1["prop2"] = 1234;
a1["prop3"] = "something else";
alert("Length of array is " + a1.length);

0 Stimmen

Ich denke, das ist nicht sicher. Zum Beispiel kann es kein Element mit einem Schlüssel von "length" haben, die Anweisung a1["length"] = "Hello world"; kann den Eintrag nicht speichern. Auch die Anweisung a1["hasOwnProperty"] = "some prop"; macht die Funktion total kaputt

3 Stimmen

@PanosTheof Ich glaube nicht, dass Sie wollen, dass es den Wert speichert, wenn Sie die length Eigenschaft, müsste jeder Code, der sie verwendet, sicherstellen, dass er nicht versucht, gegen length aber ich schätze, das wäre dasselbe, wenn es auch ein Standard-Array wäre. Überschreiben von hasOwnProperty an einem beliebigen Objekt würde höchstwahrscheinlich zu einem unerwünschten Ergebnis führen.

19voto

shaheb Punkte 438

Verwenden Sie Object.keys(myObject).length um die Länge des Objekts/Arrays zu ermitteln

var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;

console.log(Object.keys(myObject).length); //3

19voto

Oriol Punkte 246798

Wenn Sie eine assoziative Datenstruktur benötigen, die ihre Größe preisgibt, verwenden Sie besser eine Map statt eines Objekts.

const myMap = new Map();

myMap.set("firstname", "Gareth");
myMap.set("lastname", "Simpson");
myMap.set("age", 21);

console.log(myMap.size); // 3

18voto

PythonProgrammi Punkte 20089
<script>
myObj = {"key1" : "Hello", "key2" : "Goodbye"};
var size = Object.keys(myObj).length;
console.log(size);
</script>

<p id="myObj">The number of <b>keys</b> in <b>myObj</b> are: <script>document.write(size)</script></p>

Das funktioniert bei mir:

var size = Object.keys(myObj).length;

18voto

Mahendra Kulkarni Punkte 1319

Verwendung:

var myArray = new Object();
myArray["firstname"] = "Gareth";
myArray["lastname"] = "Simpson";
myArray["age"] = 21;
obj = Object.keys(myArray).length;
console.log(obj)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X