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);
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.