Методы массивов появятся в JavaScript в 2022 году

Методы массивов появятся в JavaScript в 2022 году

27 апреля 2022 г.

В предыдущих статьях я рассказывал, что Javascript хранит объекты и массивы в куче. Это означает, что массив создается один раз, а затем любые его обновления в будущем будут обновлять исходный массив. Например:


```javascript


пусть myArray = [ 1, 2, 3 ];


пусть новый массив = мой массив;


новый массив [0] = 2;


// Оба возвращают [ 2, 2, 3 ]


console.log(новый массив, мой массив);


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


```javascript


пусть myArray = [ 1, 2, 3];


пусть новыйМассив = [...мойМассив];


новый массив [0] = 2;


// Возвращает [ 2, 2, 3 ] и [ 1, 2, 3 ]


console.log(новый массив, мой массив);


Поскольку клонирование настолько распространено, была написана новая спецификация, которая достигла стадии 3, что даст нам множество новых способов копирования, а затем изменения массива. Это предложение называется "Изменить массив путем копирования". Давайте посмотрим, как это работает.


Поддерживать


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


Сказав это, polyfill существует для воссоздания поведения этого предложения, которое вы можете использовать сегодня.


Новый массив изменений с помощью методов копирования


Новое предложение добавляет 4 новых метода, которые будут копировать массив, а затем каким-то образом его изменять. Эти:


  • Array.prototype.toReversed() - клонировать массив, а затем реверсировать его

  • Array.prototype.toSorted(compareFn) - клонировать массив, а затем сортировать его.

  • Array.prototype.toSpliced(start, deleteCount, ...items) - клонировать массив и каким-либо образом склеить его.

  • Array.prototype.with(index, value) - клонировать массив и добавить новый элемент где-нибудь внутри него.

Все эти методы будут работать и с данными TypedArray, например, с Int8Array.


toReversed()


toReversed делает именно то, что говорит - берет массив и переворачивает его. Поскольку эта функция клонирует массив, нам не нужно ничего копировать, чтобы создать новую версию исходного массива:


```javascript


пусть х = [ 1, 2, 3 ];


пусть y = x.toReversed();


// Возвращает [1, 2, 3], [3, 2, 1]


console.log(х, у);


toSorted()


toSorted, является неразрушающей версией sort(), что означает, что он не изменяет исходный массив. По умолчанию возьмет массив и отсортирует его в числовом виде. Например:


```javascript


пусть х = [ 5, 3, 4, 2, 1 ];


пусть y = x.toSorted(); // [ 1, 2, 3, 4, 5 ]


Он также принимает функцию сравнения, которая работает так же, как метод sort() в Javascript. и полезен при работе с массивом объектов. Например:


```javascript


пусть х = [


{значение: 0},


{значение: 4},


{значение: 2},


{ значение: 3 }


// у становится:


// {значение: 0},


// {значение: 2},


// {значение: 3},


// { значение: 4 }


пусть y = x.toSorted((a, b) => {


вернуть a.value - b.value


toSpliced()


toSpliced() — это неразрушающая версия splice(), то есть она не изменяет исходный массив. Он принимает три аргумента:


  • start - позиция, с которой нужно начать.

  • deleteCount - количество удаляемых элементов.

  • ...items - любые элементы, которые нужно вставить в начальную позицию после удаления.

Например:


```javascript


пусть x = [ "Собака", "Кошка", "Зебра", "Летучая мышь", "Тигр", "Лев" ];


// y есть [ "Собака", "Змея", "Летучая мышь", "Тигр", "Лев" ]


пусть y = x.toSpliced(1, 2, "Змея");


// z is [ "Собака, "Тигр", "Лев" ]


пусть z = x.toSpliced(1, 3);


Вышеприведенное является прекрасным примером того, насколько полезны эти функции копирования: используя исходный метод splice(), мы удаляем элементы из x и навсегда их меняем. Используя toSpliced(), мы можем изменять x много раз, не беспокоясь об изменении его содержимого.


с()


Наконец, у нас есть with(), который просто изменяет один элемент в существующем массиве. По сути, возьмите массив «А» и покажите его «с» чем-то другим. Вот пример его в действии.


```javascript


пусть x = [ "Собака", "Кошка", "Ящерица" ]


// y теперь [ "Собака", "Зебра", "Ящерица" ]


пусть y = x.with (1, "Зебра")


// z теперь [ "Тигр", "Кошка", "Ящерица" ]


пусть z = x.with (0, "Тигр")


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


Вывод


Эти дополнения к массивам довольно бесспорны и крайне необходимы для языка, который обычно поддерживает только одну копию массива или объекта. Используя эти новые методы, Javascript устраняет путаницу и сложность кода. Хотя это не такое большое изменение, как что-то вроде [Temporal] (https://fjolt.com/article/javascript-temporal), это все же долгожданное дополнение к языку.


Также опубликовано здесь



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE