В 2023 году JavaScript получил ряд обновлений, вошедших в стандарт ES2023. Ниже — самые заметные из них.

Array.prototype.findLast

Метод findLast находит последний элемент в массиве, который удовлетворяет заданному условию. Это удобный способ поиска элементов с конца массива, что иногда необходимо в сложных структурах данных или при работе с большими массивами.

// findLast(callbackFn, thisArg)

const array = [1, 2, 3, 4, 5];
const lastEven = array.findLast(element => element % 2 === 0);

console.log(lastEven); // 4

В этом примере findLast ищет последний четный элемент в массиве. Это особенно полезно, когда порядок элементов важен и требуется обработка данных с конца массива.

Array.prototype.findLastIndex

Метод findLastIndex возвращает индекс последнего элемента в массиве, который удовлетворяет заданному условию. Он похож на findLast, но возвращает индекс, а не сам элемент.

// findLastIndex(callbackFn, thisArg)

const array = [1, 2, 3, 4, 5];
const lastEvenIndex = array.findLastIndex(element => element % 2 === 0);

console.log(lastEvenIndex); // 3

Этот метод полезен, когда нужно не только найти последний элемент, соответствующий условию, но и знать его позицию в массиве для дальнейшей обработки или манипуляций.

Array.prototype.toReversed

Метод toReversed возвращает новый массив с элементами в обратном порядке, не изменяя исходный массив. Это удобный способ получить перевернутую версию массива без необходимости изменять исходный массив.

const numbers = [1, 2, 3];
const reversed = numbers.toReversed();

console.log(reversed); // [3, 2, 1]
console.log(numbers);  // [1, 2, 3]

В этом примере toReversed создает новый массив с элементами в обратном порядке, оставляя исходный массив неизменным. Это особенно полезно для операций, требующих перевернутого порядка данных.

Array.prototype.toSorted

Метод toSorted возвращает новый отсортированный массив, не изменяя исходный. Это упрощает сортировку массивов без риска изменить исходные данные.

// toSorted(compareFn)

const numbers = [3, 1, 2];
const sorted = numbers.toSorted();

console.log(sorted);  // [1, 2, 3]
console.log(numbers); // [3, 1, 2]

Этот метод полезен, когда нужно получить отсортированную версию массива, но исходные данные должны оставаться неизменными для дальнейшего использования.

Array.prototype.toSpliced

Метод toSpliced позволяет вырезать и вставлять элементы в массив, возвращая новый массив без изменения исходного. Это расширяет возможности манипуляций с массивами без риска изменения исходных данных.

// toSpliced(start, deleteCount, item1, item2, /* …, */ itemN)

const numbers = [1, 2, 3, 4];
const spliced = numbers.toSpliced(1, 2, 5, 6);

console.log(spliced); // [1, 5, 6, 4]
console.log(numbers); // [1, 2, 3, 4]

Здесь toSpliced создает новый массив, в котором элементы с 1 по 2 индекс заменены на 5 и 6. Исходный массив остается неизменным, что позволяет безопасно использовать исходные данные в других частях программы.

Array.prototype.with

Метод with позволяет создать новый массив, изменив один элемент по заданному индексу, не изменяя исходный массив. Это полезно для работы с неизменяемыми данными, где изменение данных должно быть выполнено аккуратно и безопасно.

// arrayInstance.with(index, value)

const numbers = [1, 2, 3];
const newArray = numbers.with(1, 4);

console.log(newArray); // [1, 4, 3]
console.log(numbers);  // [1, 2, 3]

В этом примере метод with создает новый массив, где элемент с индексом 1 заменен на 4. Исходный массив остается неизменным, что делает этот метод идеальным для ситуаций, требующих работы с неизменяемыми данными.

Итог

ES2023 добавил шесть новых методов массивов: findLast, findLastIndex, toReversed, toSorted, toSpliced и with. Общая логика у них одна — работать с массивами без мутации исходных данных.