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?
 

alinnert

Mitglied
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());
 

Mat

Aktives Mitglied
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).
 

alinnert

Mitglied
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.
 
Oben Unten