2017-08-10 3 views
-1

Ich bin Konsole sie in Chrom anmelden, erscheinen sie wie folgt aus:Was ist der Unterschied zwischen diesen beiden Arrays?

(A) [] 

(B) (3) [{…}, {…}, {…}] 

Das Innere dieser Arrays identisch ist, wenn sie in der Konsole zu öffnen. Der Unterschied ist, daß ich in den Werten für B Codierung Fest bin und unter Verwendung von

arrayA.push({ 
    ... 
}); 

auf leeren (arrayA = [];) für Array A. Folglich, wenn die Elemente in Array A zuzugreifen versuchen, arrayA[0] kehrt undefiniert, im Vergleich zu arrayB[0] was den beabsichtigten Wert zurückgibt.

EDIT: hier ist eine JSFiddle

+0

https://stackoverflow.com/questions/16484838/console-logarray-shows-different-array-contents-than-iterating-the-array-and-d – epascarello

+0

Array A ist leer . Array B ist eine Liste von drei Objekten, die jeweils enthalten, was auch immer Sie mit diesen Ellipsen entfernt haben. Ich kann nicht erklären, wie du möglicherweise mit einem leeren Array fertig wirst, nachdem du etwas "draufgedrückt" hast; Sie müssen Ihren tatsächlichen Code anzeigen. [mcve] –

+0

@DanielBeck hier ist ein [JSFiddle] (https://jsfiddle.net/0u6zorau/2/) – fdsfdsgf

Antwort

0

Ihre Geige zeigt, was das Problem ist: Asynchron-Code. Du machst einen Ajax-Ruf und schiebst die Daten auf das Array, nachdem der Ruf zurückkehrt. Ihr console.log des Arrays passiert, bevor der Ajax-Aufruf zurückkehrt, daher ist das Array zu diesem Zeitpunkt noch leer.

Wenn Sie console.log die Daten innerhalb des Rückrufs protokollieren, sehen Sie die tatsächlichen Daten. Stark vereinfachtes Beispiel:

var a = []; 
$.getJSON('http://example.com', function(data) { 
    a.push(data); 
    console.log(a); // now a contains data 
}); 
console.log(a); // a is still empty, because the getJSON hasn't returned yet 
Verwandte Themen