¿Porqué razón no funciona el mapeo de una matriz construida en JavaScriptJavaScript es un lenguaje de programación que funciona en el lado del cliente y con el que las webs pueden ser más funcionales. Incorporación en código HTML El código JavaScript puede ser incrustado en las páginas HTML, para que adquieran funcionalidad. Existen varias opciones. Puede estar entre las etiquetas <SCRIPT> y </SCRIPT>, puede estar contenido en un archivo externo, puede ser un parámetro de las etiquetas HTML, y puede estar Plus?

Bühne

Nehmen wir zum Beweis an, Sie müssen ein Array von Zahlen von 0 bis 99 generieren. Wie können Sie das tun? Hier ist eine Option:

const arr = []; für (sei i = 0; i <100; i ++) {arr [i] = i; }}

Si eres como yo, ver un bucle tradicional en JavaScript te hace sentir un poco incómodo. De hecho, no he escrito un bucle tradicional en años gracias a las funciones de orden superior como  mapa, filtro y reducción. Tal vez no has tenido contacto con la ProgrammierungConcepto de Programación¿Qué es la Programación?La Programación es el procedimiento al que se recurre para crear algún tipo de aplicación o software, para materializar un concepto o proyecto que requiere de la utilización de un lenguaje informático para poder llevarse a cabo. Es algo que está absolutamente ligado a la figura del programador, y que cada vez está cobrando más relevancia dentro del mundo del marketing.Decimos que tanto esta figura Plus funcional y estás pensando que la solución anterior parece estar perfectamente bien. Técnicamente lo es, pero después de haber probado la magia de las funciones de orden superior, probablemente estás pensando, "Es muss einen besseren Weg geben". Meine erste Reaktion auf dieses Problem war: "Ich weiß! Ich werde ein leeres Array der Länge 100 erstellen und die Indizes jedes Elements abbilden ». Mit JavaScript können Sie ein leeres Array mit einer Länge erstellen n mit dem Array-Konstruktor wie folgt:

const arr = Array (100);

Perfekt, oder? Ich habe ein Array mit einer Länge von 100, daher muss ich jetzt nur noch den Index jedes Elements zuordnen.

const array = Array (100) .map ((_, i) => i); console.log (arr [0] === undefined); // wahr

Was ist los!? Das erste Element des Arrays sollte 0 sein, aber es ist tatsächlich undefiniert!

Erläuterung

Es gibt eine wichtige technische Unterscheidung, die ich hier treffen muss, um zu erklären, warum dies passiert ist. Intern sind JavaScript-Arrays Objekte mit Zahlen als Schlüssel. Zum Beispiel:

['a', 'b', 'c']

ist im Wesentlichen gleichbedeutend mit diesem Objekt:

{0: 'a', 1: 'b', 2: 'c', Länge: 3}

Wenn Sie auf das Element am Index 0 eines Arrays zugreifen, greifen Sie tatsächlich nur auf eine Objekteigenschaft zu, deren Schlüssel 0 ist. Dies ist wichtig, da Sie Arrays als Objekte in Verbindung mit der Implementierung von Funktionen höherer Ordnung betrachten (nicht Sorge, ich habe diesen Teil für dich getan), die Ursache unseres Problems macht Sinn.

Wenn mit dem Array-Konstruktor ein neues Array erstellt wird, wird ein neues Array-Objekt erstellt, dessen Längeneigenschaft auf den von Ihnen übergebenen Wert festgelegt ist. Andernfalls ist das Objekt ungültig. Die Objektdarstellung des Arrays enthält keine Indexschlüssel.

{// Keine Indexschlüssel! Länge: 100}

Sie werden undefiniert, wenn Sie versuchen, auf den Wert des Arrays bei Index 0 zuzugreifen. Es ist jedoch nicht so, dass der undefinierte Wert bei Index 0 gespeichert wird, sondern dass das Standardverhalten in JavaScript darin besteht, undefiniert zurückzugeben, wenn Sie versuchen, auf den Wert zuzugreifen eines Objekts für einen Schlüssel, der nicht existiert.

Es kommt vor, dass Funktionen höherer Ordnung die Indexschlüssel des Array-Objekts von 0 bis zur Länge abbilden, reduzieren, filtern und iterieren. Der Rückruf wird jedoch nur ausgeführt, wenn der Schlüssel im Objekt vorhanden ist. Dies erklärt, warum unser Rückruf niemals aufgerufen wird und nichts passiert, wenn wir die Map-Funktion auf dem Array aufrufen - es gibt keine Indexschlüssel!

Lösung

Wie Sie bereits wissen, benötigen wir ein Array, dessen interne Darstellung von Objekten einen Schlüssel für jede Zahl von 0 bis Länge enthält. Der beste Weg, dies zu tun, besteht darin, das Array in ein leeres Array zu verteilen.

const arr = [... Array (100)]. map ((_, i) => i); console.log (arr [0]); // 0

Das Verbreiten des Arrays in ein leeres Array führt zu einem Array, das an jedem Index mit undefinierten Elementen gefüllt ist.

{0: undefiniert, 1: undefiniert, 2: undefiniert, ... 99: undefiniert, Länge: 100}

Dies liegt daran, dass der Extent-Operator einfacher als die Kartenfunktion ist. Es schleift einfach das Array (oder ein anderes iterierbares Array) von 0 bis zur Länge und erstellt einen neuen Indexschlüssel für das angehängte Array mit dem Wert, den das Scatter-Array am aktuellen Index zurückgibt. Da JavaScript in jedem seiner Indizes undefinierte Informationen aus unserem Hash-Array zurückgibt (denken Sie daran, dass dies standardmäßig der Fall ist, da der Indexschlüssel für diesen Wert nicht vorhanden ist), erhalten wir ein neues Array, das tatsächlich mit Schlüsseln von gefüllt ist Index und daher abbildbar (und reduzierbar, filterbar und für jeden geeignet).

Fazit

Wir haben einige der Auswirkungen der internen Darstellung von Arrays als Objekte in Javascript entdeckt und den besten Weg gefunden, Arrays beliebiger Länge zu erstellen, die mit dem von Ihnen benötigten Wert gefüllt sind.

Wie immer können Sie weiter auf dieser Website surfen, auf der Sie die besten Kurse in JavaScript finden.