JavaScript
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// FILTER: Creates new array with elements that pass test
let evenNumbers = numbers.filter(num => num % 2 === 0);
console.log("Original:", numbers);
console.log("Even numbers (filter):", evenNumbers);
let greaterThan5 = numbers.filter(num => num > 5);
console.log("Numbers > 5:", greaterThan5);
// MAP: Creates new array by transforming each element
let doubled = numbers.map(num => num * 2);
console.log("\nDoubled (map):", doubled);
let squared = numbers.map(num => num ** 2);
console.log("Squared:", squared);
// REDUCE: Reduces array to single value
let sum = numbers.reduce((acc, num) => acc + num, 0);
console.log("\nSum (reduce):", sum);
let product = numbers.reduce((acc, num) => acc * num, 1);
console.log("Product:", product);
// CHAINING: Combine multiple methods
let result = numbers
.filter(num => num % 2 === 0) // [2, 4, 6, 8, 10]
.map(num => num * 2) // [4, 8, 12, 16, 20]
.reduce((acc, num) => acc + num, 0); // 60
console.log("\nChained (even * 2, then sum):", result);
// Real-world example: Processing user data
let users = [
{ name: "John", age: 25, active: true },
{ name: "Jane", age: 30, active: false },
{ name: "Bob", age: 20, active: true },
{ name: "Alice", age: 35, active: true }
];
// Get names of active users over 25
let activeOver25 = users
.filter(user => user.active && user.age > 25)
.map(user => user.name);
console.log("\nActive users over 25:", activeOver25);
// Calculate average age of active users
let avgAge = users
.filter(user => user.active)
.map(user => user.age)
.reduce((acc, age, index, array) => {
acc += age;
if (index === array.length - 1) {
return acc / array.length;
}
return acc;
}, 0);
console.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
This program demonstrates the three most important array methods in JavaScript.
FILTER: Select Elements
Creates new array with elements that pass test:
javascriptarr.filter(item => condition);
Characteristics:
- Returns new array
- Doesn't mutate original
- Returns all matching elements
- Returns empty array if none match
MAP: Transform Elements
Creates new array by transforming each element:
javascriptarr.map(item => transformation);
Characteristics:
- Returns new array
- Same length as original
- Transforms every element
- Can change data type
REDUCE: Accumulate Values
Reduces array to single value:
javascriptarr.reduce((acc, item) => { // accumulate logic return newAcc; }, initialValue);
Parameters:
-
Accumulator: Running total/result
-
Current value: Current element
-
Initial value: Starting accumulator
CHAINING METHODS
Combine multiple methods:
javascriptarr.filter(...).map(...).reduce(...);
Execution order:
- Filter runs first (filters array)
- Map runs on filtered result
- Reduce runs on mapped result
Real-world Example
Processing user data:
javascriptusers .filter(user => user.active) // Select active .map(user => user.age) // Get ages .reduce((acc, age, i, arr) => { // Calculate average acc += age; return i === arr.length - 1 ? acc / arr.length : acc; }, 0);
When to Use:
-
Filter: Select subset of elements
-
Map: Transform all elements
-
Reduce: Aggregate to single value
-
Chain: Complex data processing
Performance:
- All methods: O(n) time
- Chaining: Multiple passes (but readable)
Best Practices:
- Use arrow functions for clarity
- Chain methods for readability
- Don't mutate original arrays
- Use meaningful variable names