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.

17voto

Jānis Elmeris Punkte 1876

In manchen Fällen ist es besser, die Größe in einer separaten Variablen zu speichern. Vor allem, wenn Sie das Array an einer Stelle um ein Element erweitern und die Größe einfach inkrementieren können. Es würde natürlich viel schneller gehen, wenn Sie die Größe häufig überprüfen müssen.

17voto

Mithu A Quayium Punkte 684

Der einfachste Weg ist folgender:

Object.keys(myobject).length

Dabei ist myobject das Objekt, von dem Sie die Länge erfahren möchten.

4 Stimmen

Dies scheint nur eine Wiederholung zu sein diese bestehende Antwort .

0 Stimmen

@Pang stimmte zu, und sie liefert keinen weiteren Kontext, wie es andere Antworten tun.

16voto

Polsonby Punkte 22635

@palmsey: In Fairness zu den OP, die JavaScript-Dokumentation tatsächlich ausdrücklich auf die Verwendung von Variablen des Typs Object in dieser Weise als "assoziative Arrays" beziehen.

Und fairerweise muss man @palmsey zugestehen, dass er recht hatte. Es sind keine assoziativen Arrays; es sind definitiv Objekte :) - die die Aufgabe eines assoziativen Arrays übernehmen. Aber was den weiteren Punkt angeht, scheinen Sie laut diesem sehr guten Artikel, den ich gefunden habe, definitiv Recht zu haben:

JavaScript "Assoziative Arrays" als schädlich eingestuft

Aber nach all dem, die akzeptierte Antwort selbst eine schlechte Praxis ist?

Festlegen eines Prototyps der Funktion size() für Object

Wenn etwas anderes zu Object .prototype hinzugefügt wurde, schlägt der vorgeschlagene Code fehl:

<script type="text/javascript">
Object.prototype.size = function () {
  var len = this.length ? --this.length : -1;
    for (var k in this)
      len++;
  return len;
}
Object.prototype.size2 = function () {
  var len = this.length ? --this.length : -1;
    for (var k in this)
      len++;
  return len;
}
var myArray = new Object();
myArray["firstname"] = "Gareth";
myArray["lastname"] = "Simpson";
myArray["age"] = 21;
alert("age is " + myArray["age"]);
alert("length is " + myArray.size());
</script>

Ich glaube nicht, dass diese Antwort die akzeptierte sein sollte, da man sich nicht darauf verlassen kann, dass sie funktioniert, wenn im gleichen Ausführungskontext noch anderer Code läuft. Um es in einer robusten Art und Weise zu tun, sicherlich müssten Sie die Größe Methode innerhalb myArray definieren und für den Typ der Mitglieder überprüfen, wie Sie durch sie iterieren.

14voto

abo-elleef Punkte 1830

Wenn wir den Hash haben

hash = {"a" : "b", "c": "d"};

können wir die Länge anhand der Länge der Schlüssel ermitteln, die die Länge des Hashes ist:

schlüssel(hash).länge

2 Stimmen

Das ist eine gute Antwort, aber ich kann keine Dokumentation für diese Tastenfunktion finden. Daher kann ich nicht sicher sein, auf die Cross-Browser-Unterstützung.

2 Stimmen

Leider ist diese Antwort nicht so gut, wie ich zuerst dachte! Es hat sich herausgestellt, dass die Tastenfunktion nur in den Webkonsolen von Chrome und Firefox verfügbar ist. Wenn Sie diesen Code in ein Skript einfügen, wird es mit Uncaught ReferenceError: keys is not defined fehlschlagen

0 Stimmen

13voto

tdjprog Punkte 678
var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
  1. Object.values(myObject).length
  2. Object.entries(myObject).length
  3. Object.keys(myObject).length

1 Stimmen

Welche der oben genannten 3 ist schneller.

1 Stimmen

Object.values(myObject).length

1 Stimmen

Wie können wir sagen, dass es Object.values(myObject).length schneller ist, gibt es ein Beispiel Danke, @tdjprog

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