If you’ve ever worked with arrays in JavaScript, you’ve likely bumped into .map(), .filter(), and .reduce(). These three methods come up again and again — in coding interviews, real-world projects, and even simple logic puzzles. But understanding the difference between them and when to use each one is key to writing clean, readable code.
Let’s break them down in a way that makes sense — no fluff, no fancy jargon.
What Is .map()?
.map() is used to transform every item in an array.
You give it a function, and it runs that function on every element. It returns a new array with the same number of items, just changed.
Example
const numbers = [1, 2, 3, 4];
const doubled = numbers.map(num => num * 2);
console.log(doubled); // [2, 4, 6, 8]
🧠 Think of .map() as: “Give me the same array size, but with each item changed in some way.”
What Is .filter()?
.filter() is used to keep only the items that pass a test.
It also returns a new array, but only with the items that returned true in your test function.
Example
const numbers = [1, 2, 3, 4];
const even = numbers.filter(num => num % 2 === 0);
console.log(even); // [2, 4]
🧠 Think of .filter() as: “Keep only the items that match this condition.”
What Is .reduce()?
.reduce() is used to take an array and turn it into a single value.
It could be a number, string, object — anything. You give it a function and an initial value. That function keeps combining the items into one final result.
Example: Sum All Numbers
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((total, current) => total + current, 0);
console.log(sum); // 10
🧠 Think of .reduce() as: “Squeeze everything into one result.”
How to Choose Between .map(), .filter(), and .reduce()
You want to. | Use... |
---|---|
Change every item in the array | .map() |
Keep only items that match something | .filter() |
Turn the whole array into one value | .reduce() |
Let’s walk through a few practical problems where these methods come in handy.
🌱 Simple Logic Problem: Convert Strings to Uppercase
const fruits = ["apple", "banana", "cherry"];
const loudFruits = fruits.map(fruit => fruit.toUpperCase());
console.log(loudFruits); // ["APPLE", "BANANA", "CHERRY"]
✅ Use .map() to transform.
🧼 Filter Out Falsy Values
const mixed = [0, "hello", null, 42, undefined, "", "world"];
const truthy = mixed.filter(Boolean);
console.log(truthy); // ["hello", 42, "world"]
✅ Use .filter() to clean up the data.
📊 Tally Votes with .reduce()
const votes = ["yes", "no", "yes", "yes", "no"];
const tally = votes.reduce((acc, vote) => {
acc[vote] = (acc[vote] || 0) + 1;
return acc;
}, {});
console.log(tally); // { yes: 3, no: 2 }
✅ Use .reduce() when you need counts, totals, or any kind of "summary" data.
🧠 More Complex Example: Average Score of Passed Students
const students = [
{ name: "Jane", score: 85 },
{ name: "John", score: 45 },
{ name: "Alice", score: 77 },
{ name: "Bob", score: 32 }
];
const passed = students.filter(s => s.score >= 50);
const avgScore = passed.reduce((acc, student) => acc + student.score, 0) / passed.length;
console.log(avgScore); // (85 + 77) / 2 = 81
🧩 This combines both .filter() and .reduce() — a real-world pattern.
⚖️ Which One Should You Use?
Here’s a quick decision flow:
Want same number of items, just changed? ➜ .map()
Want fewer items, filtered by a rule? ➜ .filter()
Want one final result (a total, object, string, etc)? ➜ .reduce()
You can even chain them together.
🧪 Where to Practice
Want to get better at using these? Here are a few practice sites that help you build real confidence:
https://exercism.org/tracks/javascript – Tons of mini challenges
https://www.jshero.net/en.html – Beginner-friendly JS puzzles
https://leetcode.com – Filter by “Easy” problems with JavaScript tag
https://codewars.com – Practice with real use cases of .map(), .filter(), .reduce()
Final Thoughts
These three methods are among the most useful tools in JavaScript. They let you write clearer, shorter, and more readable code. Whether you’re cleaning data, building dashboards, or solving puzzles, knowing when and how to use .map(), .filter(), and .reduce() can really level up your problem-solving.
And remember — keep practicing. The more problems you solve using these tools, the more natural they’ll feel.
Top comments (0)