Reverse an Array in JavaScript

arr.reverse() mutates. [...arr].reverse() if you still need the original.

BeginnerArray ProgramsExample 4 of 6
reverse-an-array.js
1// Method 1: Using reverse() method (mutates original)
2let arr1 = [1, 2, 3, 4, 5];
3arr1.reverse();
4console.log("Using reverse():", arr1);
5
6// Method 2: Using reverse() without mutation (spread operator)
7let arr2 = [1, 2, 3, 4, 5];
8let reversed = [...arr2].reverse();
9console.log("\nOriginal:", arr2);
10console.log("Reversed (new array):", reversed);
11
12// Method 3: Using for loop
13function reverseArray(arr) {
14 let reversed = [];
15 for (let i = arr.length - 1; i >= 0; i--) {
16 reversed.push(arr[i]);
17 }
18 return reversed;
19}
20
21console.log("\nUsing loop:", reverseArray([10, 20, 30, 40]));
22
23// Method 4: Using while loop with two pointers
24function reverseArrayTwoPointers(arr) {
25 let left = 0;
26 let right = arr.length - 1;
27 let reversed = [...arr];
28
29 while (left < right) {
30 // Swap elements
31 [reversed[left], reversed[right]] = [reversed[right], reversed[left]];
32 left++;
33 right--;
34 }
35 return reversed;
36}
37
38console.log("\nTwo pointers:", reverseArrayTwoPointers([1, 2, 3, 4, 5]));
39
40// Method 5: Using reduce
41function reverseArrayReduce(arr) {
42 return arr.reduce((acc, item) => [item, ...acc], []);
43}
44
45console.log("\nUsing reduce:", reverseArrayReduce(['a', 'b', 'c', 'd']));
46
47// Method 6: In-place reversal (mutates original)
48function reverseInPlace(arr) {
49 let left = 0;
50 let right = arr.length - 1;
51
52 while (left < right) {
53 [arr[left], arr[right]] = [arr[right], arr[left]];
54 left++;
55 right--;
56 }
57 return arr;
58}
59
60let original = [1, 2, 3, 4];
61console.log("\nIn-place:", reverseInPlace(original));
62console.log("Original mutated:", original);

Output

Using reverse(): [ 5, 4, 3, 2, 1 ]

Original: [ 1, 2, 3, 4, 5 ]
Reversed (new array): [ 5, 4, 3, 2, 1 ]

Using loop: [ 40, 30, 20, 10 ]

Two pointers: [ 5, 4, 3, 2, 1 ]

Using reduce: [ 'd', 'c', 'b', 'a' ]

In-place: [ 4, 3, 2, 1 ]
Original mutated: [ 4, 3, 2, 1 ]

What's going on

.reverse() flips in place. Then you debug why the original list is backwards.

[...arr].reverse() or arr.toReversed() (newer) copies first.