Aktualizacje tablicy stałej za pomocą metody Array.prototype.with

Niedawno przeglądarki zyskały nową interoperacyjność, którą można wywoływać w tablicach: Array.prototype.with().

Obsługa przeglądarek

  • 110
  • 110
  • 115
  • 16

Źródło

Z tego artykułu dowiesz się, jak działa ta metoda i jak za jej pomocą aktualizować tablicę bez mutowania oryginalnej tablicy.

Wprowadzenie do: Array.prototype.with(index, value)

Metoda Array.prototype.with(index, value) zwraca kopię tablicy, do której się odwołuje, z parametrem index ustawionym na nowy podany przez Ciebie parametr value.

Przykład poniżej pokazuje tablicę wieku. Chcesz utworzyć nową kopię tablicy i zmienić drugi wiek z 15 na 16 lat:

const ages = [10, 15, 20, 25];

const newAges = ages.with(1, 16);
console.log(newAges); // [10, 16, 20, 25]
console.log(ages); // [10, 15, 20, 25] (unchanged)

Podział kodu: ages.with(...) zwraca kopię zmiennej ages bez modyfikowania pierwotnej tablicy. ages.with(1, …) zastępuje drugi element (index = 1). ages.with(1, 16) przypisuje drugi element do 16.

W ten sposób udało Ci się utworzyć nową kopię tablicy z modyfikacją.

Jest to bardzo przydatne, gdy chcesz mieć pewność, że pierwotna tablica pozostaje bez zmian. W tym artykule opisano niektóre przypadki użycia tej funkcji. Na razie przyjrzyjmy się temu, co by się stało, gdyby używali nawiasów kwadratowych:

const ages = [10, 15, 20, 25];

const newAges = ages;
newAges[1] = 16;
console.log(newAges); // [10, 16, 20, 25]
console.log(ages); // [10, 16, 20, 25] (Also changed 🙁)

Jak widać, zmienna ages również została zmodyfikowana w tym przykładzie. Dzieje się tak, ponieważ gdy przypiszesz ages = newAges, JavaScript nie kopiuje tablicy, ale tworzy odwołanie do innej tablicy. Każda zmiana w jednej z nich wpłynie na drugą, ponieważ oba będą wskazywać tę samą tablicę.

tablica.prototype.with() i niezmienność

W wielu bibliotekach i platformach frontendu niezmienność leży u podstaw m.in. React (i redux) i Vue.

Poza tym inne biblioteki i platformy niekoniecznie wymagają niezmienności, ale zachęcaj do tego, aby zwiększyć wydajność. Są to: Angular i Lit

Deweloperzy często musieli więc korzystać z innych metod, które zwracały kopie tablic, co zmniejszało czytelność kodu:

const ages = [10, 15, 20, 25];

const newAges = ages.map((age, index) => {
    if (index === 1) {
         return 16;
    }
    return age;
});

console.log(newAges); // [10, 16, 20, 25]
console.log(ages); // [10, 15, 20, 25] (Remains unchanged)

Oto przykładowy kod Codepen, który pokazuje, jak można wykorzystać obiekt .with() w React w połączeniu z metodą useState, by trwale aktualizować tablicę elementów:

Metoda .with() zwraca kopię tablicy, więc możesz utworzyć łańcuch wielu wywołań funkcji .with(), a nawet inne metody tablicy. Przykład poniżej pokazuje zwiększenie drugiej i trzeciej grupy wiekowej z tablicy:

const ages = [10, 15, 20, 25];

const newAges = ages.with(1, ages[1] + 1).with(2, ages[2] + 1)

console.log(newAges); // [10, 16, 21, 25]
console.log(ages); // [10, 15, 20, 25] (unchanged)

Inne nowe metody stałe

Niedawno zaczęły działać 3 inne metody:

Według MDN te 3 metody są kopiowaniem wersji swoich odpowiedników. Metody tych można też używać tam, gdzie niezmienność jest oczekiwana lub preferowana.

Podsumowując, stałe aktualizacje można łatwiej uzyskać w JavaScript za pomocą jednej z 4 metod opisanych w tym artykule. W szczególności metoda .with() ułatwia aktualizowanie pojedynczego elementu tablicy bez mutowania oryginalnej tablicy.