Array mit fortlaufender Zahlenreihe generieren?

Mat

Aktives Mitglied
Wenn man alles online nachschlägt, ist das schlecht für die Auffindbarkeit des Forums über Suchmaschinen. Deswegen mal eine noch blödere Frage als sonst:

Javascript:
const blarray = new Array(10);
for (let i = 0; i < blarray.length; i++) {
    blarray[i] = i;
}
// [0,1,2,3,4,5,6,7,8,9]

Geht das nicht auch mit forEach und in einer Zeile?
 
Da musste ich selbst nachschauen. Iterieren lassen sich leere Arrays nämlich nicht. D. h. .forEach(), .map() etc. funktionieren nicht. Aber folgendes geht (new bei new Array ist optional):

Array(10).keys() erzeugt einen Iterator über die Keys von 0 bis 9. Mit [...keys] oder Array.from(keys) wandelst du das wieder in ein Array um. Also insgesamt so:

Javascript:
const blarray = [...Array(10).keys()];
// oder
const blarray = Array.from(Array(10).keys());
 
Das heißt, man müsste die vorher mit fill(0) vollmachen? Deine Variante finde ich jedenfalls besser, weil forEach ja die FluentAPI an der Stelle terminiert und void zurück gibt. Also müsste man da eh 2 Zeilen nehmen oder was basteln. Oder man nimmt map.

Schade, dass es keine Ranges (wie in Ruby und Python) oder IntStreams gibt. Dann könnte man da ohne weiteres auch bestimmte Abschnitte rauf mappen (zB 75...100).
 
Richtig, folgendes würde auch gehen:

Javascript:
const blarray = Array(10)
    .fill(0)
    .map((val, i) => i);

Ganz vergessen, dass es ne .fill()-Methode gibt :D

Bzgl. Ranges hab ich potentiell gute Neuigkeiten für dich:
Gibt schon ein Proposal für Ranges, ist aktuell in Stage 1.
 
Zurück
Oben Unten