JavaScript Array.reverse() and toReversed() - Reverse Array Order
Learn Array.reverse() for in-place reversal and toReversed() (ES2023) for immutable reversal. Includes string reversal, palindrome checking, and stack patterns. Free reference.
Detailed Explanation
Understanding reverse() and toReversed()
Array.reverse()
Reverses the array in place and returns the same array reference:
const arr = [1, 2, 3, 4, 5];
const result = arr.reverse();
// arr: [5, 4, 3, 2, 1]
// result === arr: true (same reference!)
toReversed() (ES2023)
Returns a new reversed array without modifying the original:
const arr = [1, 2, 3, 4, 5];
const reversed = arr.toReversed();
// reversed: [5, 4, 3, 2, 1]
// arr: [1, 2, 3, 4, 5] (unchanged)
Pre-ES2023: Copying Before Reverse
// Spread and reverse
const reversed = [...arr].reverse();
// slice and reverse
const reversed = arr.slice().reverse();
Practical Examples
Reverse a string:
const reversed = "hello".split("").reverse().join("");
// reversed: "olleh"
Note: This approach does not handle Unicode properly. For emoji-safe reversal:
const reversed = [...str].reverse().join("");
Palindrome check:
function isPalindrome(str) {
const clean = str.toLowerCase().replace(/[^a-z0-9]/g, "");
return clean === [...clean].reverse().join("");
}
isPalindrome("racecar"); // true
isPalindrome("A man, a plan, a canal: Panama"); // true
Display recent items first:
// Show newest messages at top
const recentFirst = messages.toReversed();
Performance
reverse() is O(n) and operates in-place (no extra memory). toReversed() is also O(n) but allocates a new array. Both are very fast for typical array sizes.
Use Case
Use reverse() when you can safely mutate the array (processing a temporary copy, one-time transformations). Use toReversed() in React state, Redux reducers, or anywhere the original array must remain unchanged. Common for displaying items in reverse chronological order.