Wenn Sie sich nicht um die Unterstützung von Internet Explorer 8 oder niedriger kümmern, können Sie die Anzahl der Eigenschaften in einem Objekt ganz einfach mit den folgenden zwei Schritten ermitteln:
- Führen Sie entweder
Object.keys()
um ein Array zu erhalten, das nur die Namen derjenigen Eigenschaften enthält, die aufzählbar o Object.getOwnPropertyNames()
wenn Sie auch die Namen von Eigenschaften einschließen wollen, die nicht aufzählbar sind.
- Holen Sie sich die
.length
Eigenschaft dieses Arrays.
Wenn Sie dies mehr als einmal tun müssen, können Sie diese Logik in eine Funktion verpacken:
function size(obj, enumerablesOnly) {
return enumerablesOnly === false ?
Object.getOwnPropertyNames(obj).length :
Object.keys(obj).length;
}
So verwenden Sie diese besondere Funktion:
var myObj = Object.create({}, {
getFoo: {},
setFoo: {}
});
myObj.Foo = 12;
var myArr = [1,2,5,4,8,15];
console.log(size(myObj)); // Output : 1
console.log(size(myObj, true)); // Output : 1
console.log(size(myObj, false)); // Output : 3
console.log(size(myArr)); // Output : 6
console.log(size(myArr, true)); // Output : 6
console.log(size(myArr, false)); // Output : 7
Siehe auch diese Fiedel für eine Demo.
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.