TypeScript Array: slice vs splice

Dwie podobnie brzmiące funkcje .slice i .splice – co je różni?

Zacznijmy od .splice:

Splice modyfikuje zawartość tablicy dodając i/lub usuwając elementy bazując na podanych parametrach. Splice modyfikuje tablice na której metoda została wykonana i zwraca nową tablicę z elementami usuniętymi.

Splice akceptuje poniższe parametry:

array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

start – określa index od którego usuwamy zawartość w naszej tabeli. Przypominam, że indexy zaczynają się od 0 a nie od 1 🙂

deleteCount (parametr opcjonalny) – określa ilość rekordów w tabeli które chcemy usunąć. W przypadku jego braku metoda usuwa wszystkie elementy od indexu start. W przypadku podania wartości 0 – żaden rekord nie jest usuwany.

item1, item2 … – (parametry opcjonalne) – określa elementy które chcemy wstawić do tabeli w miejsce określone przez index start.

Przykład działania:

let myTable = ['Michal','Wojtek','Filip'];

console.log(myTable); // ['Michal','Wojtek','Filip'];

let removed = myTable.splice(1,1, 'Ola','Ala');

console.log(myTable); // ['Michal', 'Ola', 'Ala', 'Filip'] 
console.log(removed); // ['Wojtek']

Teraz przyjrzyjmy się metodzie .slice:

Slice zwraca kopię tablicy na której została wykonana na podstawie podanych parametrów (chociaż można ich też nie podawać). Funkcja nie modyfikuje bazowej tablicy.

Slice akceptuje poniższe opcjonalne parametry:

arr.slice([begin[, end]])

Begin – indeks od którego funkcja zaczyna kopiowanie tablicy. W przypadku podania wartości ujemnej np. -2 funkcja zacznie kopiowanie od drugiego elementu od końca. Jeśli parametr nie zostanie podany, zaczyna domyślnie od indeksu 0. W przypadku kiedy begin jest większe od end – zwraca pustą tablicę.

End – indeks do którego tablica ma być kopiowana (element o tym indeksie nie jest kopiowany). W przypadku podania wartości ujemnej np. -2, funkcja zakończy kopiowanie na drugiego elemencie od końca. Jeśli parametr nie zostanie podany, skopiowane zostaną wszystkie rekordy zaczynając od indeksu start. W przypadku kiedy indeks end jest mniejszy od start – zwraca pustą tablicę.

Jeśli żaden z parametrów nie zostanie podany, tablica zostanie skopiowana ze wszystkimi elementami.

Przykład działania:

let myTable = ['Michal','Wojtek','Ala','Filip'];

console.log(myTable.slice(1,2)); // ['Wojtek']
console.log(myTable.slice(0,3)); // ['Michal', 'Wojtek', 'Ala']
console.log(myTable.slice(2)); // ['Ala', 'Filip']

Sumując, jak możecie przeczytać powyżej, mimo podobnych nazw .splice i .slice działają w odmienny sposób. Splice idealnie nadaje się do usuwania rekordów z tablicy. Slice sprawdzi się kiedy musimy skopiować część elementów z tablicy a do tablicy b bez ich usuwania.