2015-07-24 7 views
5

Ich habe ein Array mit Objekten gefüllt. Es enthält 23 Artikel insgesamt, aber wenn ich einen .length darauf ausführen, gibt es 20.Array-Länge inkorrekt

// Get the new routes 
var array = PostStore.getPostList(); 

console.log(array.objects); 
console.log(array.objects.length); 

Bild von dem, was meine Konsole kehrt:

Array Length

Was geht hier schief?

+0

Gibt 'getPostList' ein' Versprechen' zurück? – Satpal

+0

Können Sie PostStore-Daten posten? – Bikas

+0

Ändern Sie 'array.objects', bevor Sie auf die Konsole schauen? Die Konsole ist "live", also zeigt sie den aktuellen Wert des Arrays, nicht was er enthielt, als Sie 'console.log()' aufgerufen haben. – Barmar

Antwort

6

Das Problem besteht wahrscheinlich darin, dass das Array zwischen dem Zeitpunkt der Protokollierung und dem Zeitpunkt des Öffnens in der Konsole geändert wurde.

Um das Array an der Aufzeichnungszeit zu bekommen, klonen:

console.log(array.objects.slice()); 
console.log(array.objects.length); 

Beachten Sie, dass diese Veränderung nicht schützen gegen die Array-Elementeigenschaften. Wenn Sie wollen, zu frieren, müssen Sie ein tiefes Klonen, die am häufigsten ist mit

console.log(JSON.parse(JSON.stringify(array.objects.slice())); 

Das wird nicht funktionieren, wenn die Objekte nicht stringifyable sind, obwohl (zyklische Objekte, sehr tiefe Objekte, Eigenschaften beim Lesen Ausnahmen werfen usw.). In diesem Fall benötigen Sie eine spezifische Klonierung, wie meine eigene JSON.prune.log.

Eine Alternative zur Protokollierung ist auch in einem solchen Fall zu debuggen. Setzen Sie einen Haltepunkt und schauen Sie sich die Objekte an, während der Code gestoppt ist.

+0

Während dies wahrscheinlich der Fall ist, seine lustige iv'e nie in diesem Problem vor lief, würde ich fragen, ist dies eine Chrom-Bedingung oder infact, wenn Sie das Array Obj auf zwei aufeinander folgenden Zeilen wird es Probleme verursachen? – Pogrindis

+0

Anstatt alles zu tun klonen und schneiden nur Print '.toString()' –

+0

@StoyanDekov toString wird es nicht tief serialisieren .. – Pogrindis

Verwandte Themen