Es sollte 1 sein
Nein, es 667 sein sollte, denn das ist, wie length
für Standard-Arrays in JavaScript definiert ist, welche aren't really arrays at all. Arrays in JavaScript sind inhärent spärlich, was bedeutet, dass sie Löcher in ihnen haben können (Indizes, in denen kein Wert gespeichert ist).
Wie kann ich die gute Zählung auf dem schnellsten Weg haben?
Der einzige Weg ist durch Schleifen. Zum Beispiel:
var count = 0;
myArr.forEach(function() {
++count;
});
console.log(count);
... oder über reduce
wie in maček's answer. forEach
, reduce
und andere solche nur besuchen Einträge, die tatsächlich vorhanden sind, so dass sie die Löcher in Sparse-Arrays überspringen.
Ich sollte erwähnen, dass seit dem IE8 noch (seufz) ein gutes Stück Marktanteil hat, Sie forEach
und reduce
und so auf sie Shim benötigen, wenn Sie sie verwenden möchten. (Das ist einfach.)
Um dies zu tun, ohne Shim, und nur tatsächliche Indexeigenschaften (nicht andere Arten von Eigenschaften) zählen, dann los:
var count = 0, name;
for (name in myArr) {
if (myArr.hasOwnProperty(name) && /^[0-9]+$/.test(name)) {
++count;
}
}
, die eine etwas lose Definition dessen, was ein verwendet Name der Indexeigenschaft ist; Wenn Sie eine robuste Version wünschen, lesen Sie den Abschnitt "For-in-for-correct" von this answer.
In js Nummer 0 reduzieren Verwendung ist wie die Nummer 1 Deshalb erhalten Sie 667. –
http://stackoverflow.com/questions/7421013/why-does-5-6-8-71-2-8-in-javascript –