DEV Community

Urmalveer Singh
Urmalveer Singh

Posted on

4 New ES2023 array methods 🔥

JavaScript has lots of array methods for doing things like sorting and reversing arrays, but the biggest problem with all these methods is they mutate the array you are working with. This is a huge problem when you are trying to write React code, functional code, or pure functions. This is why I love the new array methods that add immutable versions of all the mutable array methods we are used to. These methods are included in ECMAScript 2023 specification which has been recently finalized. In this article we will take a look at following new array methods

  • toSorted
  • toReversed
  • toSpliced
  • with

The problem and the hack

One of the best known issues with array methods that mutate the array is when you use them in a React component. You can't mutate an array and then try to set it as a new state because the array itself is the same object and this won't trigger a new render. Instead you need to copy the array first, then mutate the copy and set that as the new state. The hack for this was to create a copy of original array first and then mutate it. For example

const fruits = ["banana", "apple", "orange"];

const sortedFruits = Array.from(fruits).sort();

console.log(sortedFruits);
// ['apple', 'banana', 'orange']
Enter fullscreen mode Exit fullscreen mode

New array methods introduced in ES2023 solve this problem.

toSorted

The toSorted method returns a new array of sorted elements. It does not mutate the original array unlike its mutable counterpart sorted.

const fruits = ["banana", "apple", "orange"];

const sortedFruits = fruits.toSorted();

console.log(fruits);
// ['banana', 'apple', 'orange']
console.log(sortedFruits);
// ['apple', 'banana', 'orange']
Enter fullscreen mode Exit fullscreen mode

Know more about toSorted method here

toReversed

The toReversed method returns a new array contained the elements of original array in reversed order. It does not mutate the original array unlike its mutable counterpart reverse

const fruits = ["banana", "apple", "orange"];

const reversedFruits = fruits.toReversed();

console.log(fruits);
// ['banana', 'apple', 'orange']
console.log(reversedFruits);
// ['orange', 'apple', 'banana']
Enter fullscreen mode Exit fullscreen mode

Know more about toReversed method here

toSpliced

The toSpliced method, like splice, does multiple things at once: it removes the given number of elements from the array, starting at a given index, and then inserts the given elements at the same index. However, it returns a new array instead of modifying the original array. The deleted elements therefore are not returned from this method.

const fruits = ["banana", "apple", "orange"];

const splicedFruits = fruits.toSpliced(1, 2, "dragonfruit");

console.log(fruits);
// ['banana', 'apple', 'orange']
console.log(splicedFruits);
// ['banana', 'dragonfruit']
Enter fullscreen mode Exit fullscreen mode

Know more about toSpliced method here

with

The with function is the copy equivalent of using square bracket notation to change one element of an array. The original array is not modified. This allows you to chain array methods while doing manipulations.

const fruits = ["banana", "apple", "orange"];

const newFruits = fruits.with(1, "dragonfruit");

console.log(fruits);
// ['banana', 'apple', 'orange']
console.log(newFruits);
// ['banana', 'dragonfruit', 'orange']
Enter fullscreen mode Exit fullscreen mode

Know more about with method here

Happy Coding 🧑‍💻

Top comments (0)