Sunt immutable array iterators — returnează o nouă valoare în loc să muteze originalul, ceea ce duce la cod mai curat și mai declarativ decât for loops manuale.
js
const nums = [1, 2, 3, 4];
// map: transform each item → array of the SAME length
nums.map(n => n * 2); // [2, 4, 6, 8]
// filter: keep items passing a test → SHORTER array
nums.filter(n => n % 2 === 0); // [2, 4]
// reduce: fold the array into ONE value (accumulator + current)
nums.reduce((sum, n) => sum + n, 0); // 10
// ^acc ^item ^initial value
Cum funcționează reduce (cea pe care oamenii o găsesc dificilă)
Reduce parcurge array-ul purtând un "acumulator". Fiecare pas returnează noul acumulator:
js
// step 0: acc=0, n=1 → 1
// step 1: acc=1, n=2 → 3
// step 2: acc=3, n=3 → 6
// step 3: acc=6, n=4 → 10
Nu e doar pentru sume — reduce poate construi obiecte, grupa elemente sau aplati:
js
users.reduce((acc, u) => { acc[u.id] = u; return acc; }, {}); // index by id
De ce să le preferi
Ele se înlănțuiesc curat și nu mutează, ceea ce conteaza în UI-uri conduse de stare. Folosește forEach doar pentru efecte secundare (nu returnează nimic). Pentru array-uri uriașe unde altfel ai înlănțui mai multe treceri, un singur reduce sau o buclă obișnuită pot fi mai eficiente.
