DEV Community

Samantha Ming
Samantha Ming

Posted on

CodeRecipe: How to reverse an array in JavaScript

CodeTidbit by SamanthaMing.com

Here's a Code Recipe to keep around if you need to reverse the order of the elements of an array. You can use the array method, "reverse()" โช

Trying a new segment called #CodeRecipes. I want to cover questions that I often google. These are recipes that you should definitely keep handy because it's not a matter "if" you use it, but "when" ๐Ÿ˜‰

const benjamin = ['๐Ÿ‘ถ','๐Ÿ‘ฆ', '๐Ÿ‘จ', '๐Ÿ‘ด'];

const benjaminButton = benjamin.reverse();

console.log(benjaminButton);
// ['๐Ÿ‘ด', '๐Ÿ‘จ', '๐Ÿ‘ฆ', '๐Ÿ‘ถ']

Modifies Original Array

One thing to note is that it mutates the original array.

const originalArray = ['a', 'b', 'c'];
const newArray = originalArray.reverse();

console.log(originalArray); // [ 'c', 'b', 'a' ]
console.log(newArray); // [ 'c', 'b', 'a' ]

How to Reverse Array Without Mutating Original Array

Here are some recipes that won't mutate the original array. Let's take a look ๐Ÿ‘€

Using slice and reverse

const originalArray = ['a', 'b', 'c'];
const newArray = originalArray.slice().reverse();

console.log(originalArray); // ['a', 'b', 'c']
console.log(newArray); // [ 'c', 'b', 'a' ]

Using spread and reverse

const originalArray = ['a', 'b', 'c'];
const newArray = [...originalArray].reverse();

console.log(originalArray); // ['a', 'b', 'c']
console.log(newArray); // [ 'c', 'b', 'a' ]

Using reduce and spread

const originalArray = ['a', 'b', 'c'];
const newArray = originalArray.reduce((accumulator, value) => {
  return [value, ...accumulator]
}, []);

console.log(originalArray); // ['a', 'b', 'c']
console.log(newArray); // [ 'c', 'b', 'a' ]

Using reduceRight and spread

const originalArray = ['a', 'b', 'c'];
const newArray = originalArray.reduceRight((accumulator, value) => {
  console.log(value);
  return [...accumulator, value]
}, []);

console.log(originalArray); // ['a', 'b', 'c']
console.log(newArray); // [ 'c', 'b', 'a' ]

Or using push

const originalArray = ['a', 'b', 'c'];
const newArray = originalArray.reduceRight((accumulator, value) => {
  accumulator.push(value);
  return accumulator;
}, []);

console.log(originalArray); // ['a', 'b', 'c']
console.log(newArray); // [ 'c', 'b', 'a' ]

Community Input

@aminnair: I decided to test another way of thinking this. Here are the results:

with slice and reverse: 83.085ms
With one loop: 309.763ms

Source code and tests are available here

Resources


Thanks for reading โค
Say Hello! Instagram | Twitter | Facebook | Blog | SamanthaMing.com

Latest comments (13)

Collapse
 
realandersonca profile image
Real Anderson

Good Tips. Something New Learn Today.

Collapse
 
mzahraei profile image
Ardalan

Good Tipps

Collapse
 
samanthaming profile image
Samantha Ming

Thanks! Glad you found it helpful ๐Ÿ‘

Collapse
 
afozbek profile image
Abdullah Furkan ร–zbek

Hey Samantha,

I have a question: What is the runtime of Array.reverse() method ?

Thank you ๐Ÿ˜Š

Collapse
 
ogurinkaben profile image
Ogurinka Benjamin

I saw my name a lot here๐Ÿ˜๐Ÿ˜.

Collapse
 
samanthaming profile image
Samantha Ming

Lol, itโ€™s a good name! Hopefully itโ€™s just Benjamin and not Benjamin button ๐Ÿ˜‚

Collapse
 
ogurinkaben profile image
Ogurinka Benjamin

Lol... just Benjamin๐Ÿ˜‚๐Ÿ˜‚๐Ÿ˜‚

Thread Thread
 
samanthaming profile image
Samantha Ming

Phew! Cause I donโ€™t think I know a doctor for that otherwise ๐Ÿ˜‚

Some comments may only be visible to logged-in visitors. Sign in to view all comments.