Metodele Imutabile pe Tablouri în ES2023 (toSorted, toReversed, toSpliced & with) în JavaScript

Tablouri (array) ECMAScript 2023 (ES14)

Ghid pentru noile metode imutabile pe tablouri din ES2023: cum sortezi, inversezi și modifici elemente fără a muta tabloul original, ideal pentru React și programare funcțională.

Sintaxă
const sortat = arr.toSorted(); const modificat = arr.with(2, 'nou');

În specificația ECMAScript 2023 (ES14), JavaScript a rezolvat una dintre cele mai mari surse de bug-uri accidentale: metodele istorice pe tablouri sort(), reverse() și splice() modificau (mutau) tabloul original direct în memorie (in-place mutation). În framework-uri reactive moderne precum React sau Redux, mutarea directă a stării previne re-randarea corectă a componentelor.

Noile metode Change Array by Copy returnează întotdeauna o copie nouă a tabloului cu modificarea aplicată, lăsând tabloul sursă complet intact și imutabil.

Exemple practice cu toSorted, toReversed, toSpliced și with
// Tabloul original de pornire
const numere = [40, 10, 100, 25, 5];

// 1. toSorted() în loc de sort() - sortează fără a modifica originalul
const numereSortate = numere.toSorted((a, b) => a - b);
console.log(numereSortate); // [5, 10, 25, 40, 100]
console.log(numere);        // [40, 10, 100, 25, 5] (originalul este neschimbat!)

// 2. toReversed() în loc de reverse()
const inversate = numere.toReversed();
console.log(inversate);     // [5, 25, 100, 10, 40]

// 3. toSpliced(start, deleteCount, ...items) în loc de splice()
// Șterge 1 element de la indexul 1 și inserează 999
const cuInlocuire = numere.toSpliced(1, 1, 999);
console.log(cuInlocuire);   // [40, 999, 100, 25, 5]

// 4. with(index, valoareNoua) - actualizează un singur element imutabil
// Înlocuiește sintaxa greoaie [...arr.slice(0, 2), 'nou', ...arr.slice(3)]
const utilizatori = ['Andrei', 'Elena', 'Mihai'];
const actualizati = utilizatori.with(1, 'Elena Popescu');
console.log(actualizati);   // ['Andrei', 'Elena Popescu', 'Mihai']
console.log(utilizatori);   // ['Andrei', 'Elena', 'Mihai']

Indexare Negativă

Toate aceste metode acceptă indexare negativă (introdusă cu metoda at()). De exemplu, arr.with(-1, 'ultimul') va înlocui ultimul element al copiei fără a fi nevoie să calculezi manual arr.length - 1.