Array Methods: Filter, Map, Reduce in JavaScript
filter keeps, map changes, reduce smashes to one value. They do not mutate.
IntermediateArray ProgramsExample 6 of 6
array-methods-filter-map-reduce.js
1let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];23// FILTER: Creates new array with elements that pass test4let evenNumbers = numbers.filter(num => num % 2 === 0);5console.log("Original:", numbers);6console.log("Even numbers (filter):", evenNumbers);78let greaterThan5 = numbers.filter(num => num > 5);9console.log("Numbers > 5:", greaterThan5);1011// MAP: Creates new array by transforming each element12let doubled = numbers.map(num => num * 2);13console.log("\nDoubled (map):", doubled);1415let squared = numbers.map(num => num ** 2);16console.log("Squared:", squared);1718// REDUCE: Reduces array to single value19let sum = numbers.reduce((acc, num) => acc + num, 0);20console.log("\nSum (reduce):", sum);2122let product = numbers.reduce((acc, num) => acc * num, 1);23console.log("Product:", product);2425// CHAINING: Combine multiple methods26let result = numbers27 .filter(num => num % 2 === 0) // [2, 4, 6, 8, 10]28 .map(num => num * 2) // [4, 8, 12, 16, 20]29 .reduce((acc, num) => acc + num, 0); // 603031console.log("\nChained (even * 2, then sum):", result);3233// Real-world example: Processing user data34let users = [35 { name: "John", age: 25, active: true },36 { name: "Jane", age: 30, active: false },37 { name: "Bob", age: 20, active: true },38 { name: "Alice", age: 35, active: true }39];4041// Get names of active users over 2542let activeOver25 = users43 .filter(user => user.active && user.age > 25)44 .map(user => user.name);4546console.log("\nActive users over 25:", activeOver25);4748// Calculate average age of active users49let avgAge = users50 .filter(user => user.active)51 .map(user => user.age)52 .reduce((acc, age, index, array) => {53 acc += age;54 if (index === array.length - 1) {55 return acc / array.length;56 }57 return acc;58 }, 0);5960console.log("Average age of active users:", avgAge);
Output
Original: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] Even numbers (filter): [ 2, 4, 6, 8, 10 ] Numbers > 5: [ 6, 7, 8, 9, 10 ] Doubled (map): [ 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 ] Squared: [ 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 ] Sum (reduce): 55 Product: 3628800 Chained (even * 2, then sum): 60 Active users over 25: [ 'Jane', 'Alice' ] Average age of active users: 30
What's going on
filter yes/no. map same length, new values. reduce one result.
Chain them. Do not .forEach and push into an outer array unless you like bugs.