Rolf B: Javascript: 2-dimensionales Array erstellen

Beitrag lesen

problematische Seite

Hallo Linuchs,

bitte entschuldige, ich habe nicht gut nachgedacht. Ich hatte Dich so verstanden, als wolltest Du ein Array haben, das pro Eintrag ein Pärchen aus Playlist-Element und LI-Liste enthält.

Deine weiteren Beiträge zeigen, dass Du ein 2D Array willst, das nur die li Einträge pro Playlist enthält, und das sollte dein ursprünglicher Code auch tun. Ich werde an dieser Stelle nicht mehr drauf eingehen, die Diskussion ist ja schon weiter.

Mein Code sollte sowas produzieren:

+------------+------------------+
|            | +----+----+----+ |
|  playlist  | | li | li | li | |
|            | +----+----+----+ |
+------------+------------------+
|            | +----+----+----+ |
|  playlist  | | li | li | li | |
|            | +----+----+----+ |
+------------+------------------+
|            | +----+----+----+ |
|  playlist  | | li | li | li | |
|            | +----+----+----+ |
+------------+------------------+

Aber das wäre dann ja schon dreidimensional gewesen.

Ich bin aber noch eine Antwort auf deine Frage nach dem pl und i schuldig. Ich wende die map-Methode von Arrays auf die Einträge einer Nodelist an. WENN eine Nodelist ein Array wäre, könnte man das so schreiben:

nodelist.map(callback);

Aber das ist sie nicht, deshalb der Umweg über .call:

Array.prototype.map.call(nodelist, callback);

Damit kann man map auf jedes Ding anwenden, das einen Indexzugriff und eine length-Eigenschaft hat.

map übergibt dem Callback 3 Werte - siehe Wiki. Die beiden ersten nehme ich mit dieser Pfeilfunktion entgegen:

(pl, i) => [ pl, pl.querySelectorAll("li")

Mit einer herkömmlichen anonymen Funktion würde man statt dessen schreiben:

function(pl, i) { return [ pl, pl.querySelectorAll("li") ]; }

Das ist (fast) das Gleiche. Die Unterschiede werden im verlinkten Wiki-Artikel zu Pfeilfunktionen erklärt.

Rolf

--
sumpsi - posui - obstruxi