Array, fill, map - proszę o wytłumaczenie

0

Cześć, jestem początkującym jeśli chodzi o nauke JS'a. Czy mógłby mi ktoś wytłumaczyć w jaki sposób działa poniższy kod? Ja to rozumiem w ten sposób, że returnujemy tablice (o podanej przez nas długości) , a następnie wypełniamy ją zerami. Dokładamy do tego jeszcze mape, która tworzy nową tablicę. I tutaj czegoś nie rozumiem. Dlaczego console.log wyrzuca tablice o elementach od 0 do 4 skoro w poniższym kodzie nie ma nigdzie żadnej inkrementacji (jest tylko map((el, i)=>i)).

const tableGenerator = {
generateTable(lng){
return Array(lng).fill(0).map((el,i)=>i);
},

}
console.log(tableGenerator.generateTable(5));

0

callback w metodzie map (tutaj (el, i)=>i))jako pierwszy argument dostaje element tablicy (czyli w tym przypadku będzie to zawsze 0, skoro każdy element to 0), jako drugi argument dostaje indeks, czyli:
map((el,i)=>i);
tutaj i zawiera indeks, dla pierwszego elementu 0 (liczymy od zera), dla drugiego elementu 1, dla trzeciego elementu 2.
oczywiście callback uruchomi się dla każdego przypisanego do tablicy elementu.
więc tym sposobem
[0, 0, 0, 0, 0] zamieni się w [0, 1, 2, 3, 4]

jako ciekawostkę mogę powiedzieć, że gdybyśmy pominęli w tym przykładzie fill(0), to callback w ogóle by się nie uruchomił, bo callback is invoked only for indexes of the array which have assigned values (including undefined).
Nie znaczy to, że fill jest niezbędne, po prostu trzeba jakoś zainicjalizować elementy tablicy, żeby map działało.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

lng

Taka uwaga dot. stylu. Lepiej nie robić takich skrótów, chyba, że są to ogólnie przyjęte skróty. Np. lng często oznacza longitude (długość geograficzną, jeśli kod posługuje się jakimiś mapami). Natomiast programiści jak chcą skrócić length, to prędzej napiszą len. Wtedy łatwiej to zrozumieć innemu programiście (a ja przynajmniej się nie spotkałem wcześniej ze skrótem length -> lng).

1 użytkowników online, w tym zalogowanych: 0, gości: 1