map, filter, reduce
map() har element ko TRANSFORM karta hai, NAYA array return karta hai (same length). filter() har element ko TEST karta hai, sirf matching elements ka NAYA array return karta hai (chhota ya same length). reduce() poore array ko EK single value mein "reduce" karta hai (sum, object, kuch bhi) — accumulator pattern.
Ye teeno "pure" hain — original array MODIFY nahi karte, naya result return karte hain. Modern JavaScript mein traditional for loops se bahut zyada common/preferred hain jab array transform/filter/aggregate karna ho.
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(n => n * 2);
console.log(doubled); // [2, 4, 6, 8, 10]
const evens = numbers.filter(n => n % 2 === 0);
console.log(evens); // [2, 4]
const sum = numbers.reduce((total, n) => total + n, 0);
console.log(sum); // 15 (0 = starting value)
// Chaining — sab ek saath:
const result = numbers
.filter(n => n % 2 === 0)
.map(n => n * n)
.reduce((sum, n) => sum + n, 0);
console.log(result); // (2²+4²) = 20- map = transform (same length), filter = select (chhota/same), reduce = combine (single value)
- Original array modify nahi karte — naya result return karte hain
- Chaining se complex transformations readable steps mein ban jaati hain
reduce() sirf numbers sum karne ke liye nahi hai — accumulator KUCH BHI ho sakta hai (object, array, string) — array ko object mein "group by" karna ek bahut common advanced use-case hai.
const people = [
{ name: "Aarav", dept: "IT" },
{ name: "Riya", dept: "HR" },
{ name: "Zoya", dept: "IT" }
];
const groupedByDept = people.reduce((acc, person) => {
if (!acc[person.dept]) acc[person.dept] = [];
acc[person.dept].push(person.name);
return acc;
}, {});
console.log(groupedByDept);
// { IT: ["Aarav", "Zoya"], HR: ["Riya"] }map() NAYA array return karta hai (transformation ke liye). forEach() KUCH return nahi karta (undefined) — sirf side-effects (jaise console.log, DOM update) ke liye. Agar result CHAHIYE, map() use karo; agar sirf "kuch karna hai har item ke liye", forEach() use karo.
const numbers = [1, 2, 3];
// map — result chahiye:
const doubled = numbers.map(n => n * 2); // [2, 4, 6]
// forEach — sirf side-effect (koi result nahi chahiye):
numbers.forEach(n => console.log(n)); // sirf print karta hai, return karta hai undefined
// GALAT use — map ka result use hi nahi ho raha:
// numbers.map(n => console.log(n)); // forEach use karna chahiye tha