Jag har ett JavaScript-objekt. Finns det ett inbyggt eller accepterat bästa praxis för att få fram längden på detta objekt?
var myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
Jag är ingen JavaScript-expert, men det ser ut som om du måste gå igenom elementen och räkna dem eftersom Object inte har någon längdmetod:
var element_count = 0;
for (e in myArray) { if (myArray.hasOwnProperty(e)) element_count++; }
@palmsey: För att vara rättvis mot OP hänvisar JavaScript-dokumentationen faktiskt uttryckligen till att använda variabler av typen Object på detta sätt som "associative arrays".
@palmsey: För att vara rättvis mot OP hänvisar javascript-dokumentationen faktiskt uttryckligen till att använda variabler av typen Object på detta sätt som "associative arrays".
Och för att vara rättvis mot @palmsey så hade han helt rätt, de är inte associativa matriser, de är definitivt objekt :) - som gör samma sak som en associativ matris. Men när det gäller den bredare punkten verkar du definitivt ha rätt enligt denna ganska fina artikel som jag hittade:
[JavaScript "Associative Arrays" Considered Harmful] (http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/)
Men enligt allt detta, är inte det accepterade svaret i sig självt dålig praxis?
Ange en prototyp för en size()-funktion för Object
Om något annat har lagts till i Object .prototype kommer den föreslagna koden att misslyckas:
<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>
Jag tror inte att det svaret bör accepteras, eftersom det inte går att lita på att det fungerar om du har annan kod som körs i samma exekveringskontext. För att göra det på ett robust sätt måste du säkert definiera size-metoden i myArray och kontrollera typen på medlemmarna när du itererar genom dem.