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];
2
3// FILTER: Creates new array with elements that pass test
4let evenNumbers = numbers.filter(num => num % 2 === 0);
5console.log("Original:", numbers);
6console.log("Even numbers (filter):", evenNumbers);
7
8let greaterThan5 = numbers.filter(num => num > 5);
9console.log("Numbers > 5:", greaterThan5);
10
11// MAP: Creates new array by transforming each element
12let doubled = numbers.map(num => num * 2);
13console.log("\nDoubled (map):", doubled);
14
15let squared = numbers.map(num => num ** 2);
16console.log("Squared:", squared);
17
18// REDUCE: Reduces array to single value
19let sum = numbers.reduce((acc, num) => acc + num, 0);
20console.log("\nSum (reduce):", sum);
21
22let product = numbers.reduce((acc, num) => acc * num, 1);
23console.log("Product:", product);
24
25// CHAINING: Combine multiple methods
26let result = numbers
27 .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); // 60
30
31console.log("\nChained (even * 2, then sum):", result);
32
33// Real-world example: Processing user data
34let 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];
40
41// Get names of active users over 25
42let activeOver25 = users
43 .filter(user => user.active && user.age > 25)
44 .map(user => user.name);
45
46console.log("\nActive users over 25:", activeOver25);
47
48// Calculate average age of active users
49let avgAge = users
50 .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);
59
60console.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.