JavaScript Array Methods
JavaScript array methods cheat sheet with map, filter, reduce, find, sort, and practical code examples for data transformation.
Other JavaScript Sheets
Sign in to mark items as known and track your progress.
Sign inTransformation Methods
Transform arrays into new arrays with modified data
map() - Transform Elements
Create a new array by transforming each element
// Create new array by transforming each element
const doubled = [1, 2, 3].map(x => x * 2);
// [2, 4, 6]
const users = [{name: 'John', age: 30}];
const names = users.map(u => u.name);
// ['John']
// With index
const indexed = ['a', 'b'].map((val, i) => `${i}: ${val}`);
// ['0: a', '1: b']filter() - Select Elements
Create a new array with elements that pass a test
// Keep elements that pass the test
const evens = [1, 2, 3, 4].filter(x => x % 2 === 0);
// [2, 4]
const adults = users.filter(u => u.age >= 18);
// Remove falsy values
const truthy = [0, 1, '', 'hello', null].filter(Boolean);
// [1, 'hello']reduce() - Aggregate Values
Reduce array to single value using accumulator
// Sum all numbers
const sum = [1, 2, 3].reduce((acc, x) => acc + x, 0);
// 6
// Group by property
const grouped = items.reduce((acc, item) => {
acc[item.category] = acc[item.category] || [];
acc[item.category].push(item);
return acc;
}, {});Searching & Testing
Find elements and test array conditions
find() & findIndex()
Find first element matching condition or its index
// Find first matching element
const found = [1, 2, 3].find(x => x > 1);
// 2
// Find index of first match
const index = [1, 2, 3].findIndex(x => x > 1);
// 1
// Find in objects
const user = users.find(u => u.id === 123);
const userIndex = users.findIndex(u => u.id === 123);some() & every()
Test if any/all elements pass a condition
// Test if ANY element passes
const hasEven = [1, 2, 3].some(x => x % 2 === 0);
// true
// Test if ALL elements pass
const allPositive = [1, 2, 3].every(x => x > 0);
// true
// Check for empty array
const isEmpty = array.length === 0 || array.every(x => !x);includes() & indexOf()
Check if array contains a value or find its position
// Check if array contains value
[1, 2, 3].includes(2); // true
['a', 'b'].includes('c'); // false
// Find index of value
[1, 2, 3].indexOf(2); // 1
['a', 'b'].indexOf('c'); // -1
// Starting from index
arr.includes(value, fromIndex);
arr.indexOf(value, fromIndex);Array Manipulation
Add, remove, and rearrange array elements
Adding & Removing Elements
Methods to add and remove array elements
// Add/remove from end
arr.push(4, 5); // Returns new length
arr.pop(); // Returns removed element
// Add/remove from start
arr.unshift(0); // Returns new length
arr.shift(); // Returns removed element
// Add/remove anywhere
arr.splice(1, 2, 'a', 'b'); // At index 1, remove 2, add 'a', 'b'slice() & concat()
Extract portions and combine arrays without mutation
// Copy portion of array
const portion = arr.slice(1, 3); // Items at index 1, 2
const last3 = arr.slice(-3); // Last 3 items
const copy = arr.slice(); // Full copy
// Combine arrays
const combined = arr1.concat(arr2, arr3);
const combined = [...arr1, ...arr2]; // Modern waysort() & reverse()
Sort and reverse array elements in place
// Sort (mutates array!)
arr.sort(); // Alphabetical
arr.sort((a, b) => a - b); // Numeric ascending
arr.sort((a, b) => b - a); // Numeric descending
// Reverse (mutates array!)
arr.reverse();
// Non-mutating versions
const sorted = [...arr].sort();
const reversed = [...arr].reverse();Iteration Methods
Loop through arrays and process elements
forEach() - Side Effects
Execute function for each element (side effects only)
// Execute function for each element (no return)
[1, 2, 3].forEach(x => console.log(x));
// With index and array
arr.forEach((val, index, array) => {
console.log(`${index}: ${val}`);
});
// Can't break early (use for...of instead)join() & Array/String Conversion
Convert array to string and vice versa
// Array to string
[1, 2, 3].join(); // '1,2,3'
[1, 2, 3].join(' - '); // '1 - 2 - 3'
[1, 2, 3].join(''); // '123'
// String to array
'1,2,3'.split(','); // ['1', '2', '3']
'hello'.split(''); // ['h', 'e', 'l', 'l', 'o']
Array.from('hello'); // ['h', 'e', 'l', 'l', 'o']flat() & flatMap()
Flatten nested arrays and map-then-flatten
// Flatten nested arrays
[1, [2, 3]].flat(); // [1, 2, 3]
[1, [2, [3]]].flat(2); // [1, 2, 3] (depth 2)
// Map and flatten
[1, 2].flatMap(x => [x, x * 2]); // [1, 2, 2, 4]
// Remove empty slots
[1, , 3].flat(); // [1, 3]Array Creation & Conversion
Create new arrays and convert between types
Array.from() & Array.of()
Create arrays from array-like objects or iterables
// Create array from iterable
Array.from('hello'); // ['h', 'e', 'l', 'l', 'o']
Array.from(new Set([1, 2])); // [1, 2]
// With mapping function
Array.from({length: 5}, (_, i) => i); // [0, 1, 2, 3, 4]
// Create array from arguments
Array.of(1, 2, 3); // [1, 2, 3]
Array.of(7); // [7] (not empty array of length 7)fill() & copyWithin()
Fill array with values or copy elements within
// Fill array with value
[1, 2, 3].fill(0); // [0, 0, 0]
[1, 2, 3].fill(0, 1); // [1, 0, 0]
[1, 2, 3].fill(0, 1, 2); // [1, 0, 3]
// Copy within array
[1, 2, 3, 4, 5].copyWithin(0, 3); // [4, 5, 3, 4, 5]Modern Array Methods (ES2023+)
Immutable variants, findLast, fromAsync, and grouping (ES2023+)
Immutable Variants: toSorted, toReversed, toSpliced, with
Non-mutating versions of sort/reverse/splice and indexed update
const nums = [3, 1, 2]
const sorted = nums.toSorted() // [1, 2, 3] — nums untouched
const reversed = nums.toReversed() // [2, 1, 3] — nums untouched
const removed = nums.toSpliced(0, 1) // [1, 2] — nums untouched
const updated = nums.with(0, 99) // [99, 1, 2] — nums untouched
console.log(nums) // [3, 1, 2] — original preservedfindLast & findLastIndex
Search from the end — perfect for "most recent matching"
const events = [
{ type: 'login', at: 1 },
{ type: 'click', at: 2 },
{ type: 'login', at: 3 },
{ type: 'logout', at: 4 },
]
const lastLogin = events.findLast(e => e.type === 'login')
// { type: 'login', at: 3 }
const lastLoginIdx = events.findLastIndex(e => e.type === 'login')
// 2Array.fromAsync & Grouping
Build arrays from async iterables, group by key (Object.groupBy / Map.groupBy)
// Array.fromAsync — collect an async iterable into an array
async function* lines(file) {
for await (const chunk of file.stream()) yield chunk
}
const allLines = await Array.fromAsync(lines(myFile))
// Object.groupBy — group items by a derived key (ES2024)
const items = [
{ name: 'apple', type: 'fruit' },
{ name: 'carrot', type: 'veg' },
{ name: 'pear', type: 'fruit' },
]
const byType = Object.groupBy(items, x => x.type)
// { fruit: [{...apple}, {...pear}], veg: [{...carrot}] }
// Map.groupBy — same idea, but the key can be any value (incl. objects)
const byParent = Map.groupBy(rows, r => r.parent)