Object.keys
tut no im Falle eines Objekts das richtige Ergebnis zurückgeben Vererbung . Um Objekteigenschaften, einschließlich geerbter, korrekt zu zählen, verwenden Sie for-in
. Zum Beispiel durch die folgende Funktion (bezogen auf Frage ):
var objLength = (o,i=0) => { for(p in o) i++; return i }
var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
var child = Object.create(myObject);
child["sex"] = "male";
var objLength = (o,i=0) => { for(p in o) i++; return i }
console.log("Object.keys(myObject):", Object.keys(myObject).length, "(OK)");
console.log("Object.keys(child) :", Object.keys(child).length, "(wrong)");
console.log("objLength(child) :", objLength(child), "(OK)");
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.