Robust och härlig metod för att få ut “längden” på ett associativt array. Hittat på StackOverflow.
// http://stackoverflow.com/questions/5223/length-of-javascript-associative-array
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
//Används:
var foo = { bar: true, oh: "hai" };
Object.size(foo); // 2
Tydligen är det farligt att lägga saker på Object.prototype, men att göra såhär skadar ingen.
EDIT
Efter en kommentar och lite testning verkar det som att den här funktionen går att lägga direkt på Object.prototype. Det verkar som att funktionen gör vad den ska, även om man lägger på fler metoder eller egenskaper på Object.property.
Det skulle isåfall se ut såhär:
Object.prototype.size = function() { //Metoden size läggs till på alla objekt... Dvs alla typer
var size = 0, key;
for (key in this) {
if (this.hasOwnProperty(key)) size++;
}
return size;
};
//Används:
var foo = { bar: true, oh: "hai" };
foo.size(); // 2 (size anropas direkt på objektet)
Man bör nog ändå tänka sig för innan man börjar lägga på saker på property-kedjor som är ömtåliga (Function, Object, Array osv), men om man har stor kontroll över sin kod och inga utomstående bibliotek som krockar så ska det här vara relativt ofarligt.
Tack Joacim för kommentaren, alltid kul att få såna. :p