10 Stimmen

Füllt JavaScript leere Array-Elemente auf?

Ich bin Kodierung eine Menge von jährlichen Daten in JavaScript, und ich war in Erwägung, es zu Arrays hinzufügen, mit dem Jahr als Array-Index und die Daten in das Array setzen. Allerdings scheint Firebug anzugeben, dass JavaScript dies durch Auffüllen zweitausend ungerade Einträge in das Array mit "undefined" behandelt. Mit Hunderten von solchen Arrays kicking um im aktiven Speicher, bin ich besorgt, dass der Overhead von Hunderttausenden von nutzlosen Array-Elemente könnte beginnen, das Programm zu verlangsamen. Wird es das?

12voto

Christian C. Salvadó Punkte 763569

Wenn Sie den Wert eines numerischen Indexes höher setzen als den aktuellen length Ihres Arrays, die length Eigenschaft betroffen ist.

Kurz gesagt, Sie sollten eine Object :

var data = {};
data[year] = "some data";

// or
var data = {
  2009: "2009 data",
  2010: "2010 data"
};

Jetzt antworte ich auf die Überschrift der Frage: " Füllt JavaScript leere Array-Elemente auf? "

Nein, wie ich schon sagte, nur die length Eigenschaft geändert wird (wenn nötig, nur wenn der hinzugefügte Index größer ist als der aktuelle length ), length wird um einen Wert größer als der numerische Wert dieses Indexes erhöht.

El Array.prototype Methoden arbeiten unter der Annahme, dass die Indizes des Array-Objekts bei Null beginnen.

Die vorherigen Indizes existieren nicht wirklich in der Array Objekt, können Sie es testen:

var array = [];
array[10] = undefined;

array.hasOwnProperty(10); // true
array.hasOwnProperty(9);  // false

Zusammenfassend lässt sich sagen, dass Arrays dazu gedacht sind, sequenzielle Indizes zu enthalten, beginnend bei Null. Wenn Ihre Eigenschaften diese Anforderungen nicht erfüllen, sollten Sie einfach ein Objekt verwenden.

4voto

Brian McKenna Punkte 43653

Ja, höchstwahrscheinlich. Sie sollten stattdessen ein JavaScript-Objekt verwenden:

var years = {2009: 'Good', 2010: 'Better'};

0voto

Bjorn Punkte 64323

Nun, wenn Sie über viele Tausende von undefinierten iterieren, wird es die Gesamtgeschwindigkeit des Programms beeinträchtigen, nicht sicher, ob Sie es aber bemerken werden.

0voto

kennebec Punkte 98551

Andererseits ist es manchmal einfacher, ein spärliches Array zu verwenden als ein benutzerdefiniertes Objekt, und Arrays haben so praktische Methoden zur Verfügung.

In einer Kalenderanwendung beginne ich mit Objekten für jedes verwendete Jahr, aber jedes Jahr besteht aus einem zwölfgliedrigen Array (Monate), und jeder "Monat" ist ein spärliches Array signifikanter Daten, deren Länge vom höchsten Datum dieses Monats abhängt, das irgendwelche Daten enthält.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X