PorównaniePorównania

slice() vs splice()

slice() kopiuje fragment tablicy bez zmian w oryginale, a splice() usuwa, wstawia lub zastępuje elementy w miejscu, mutując tablicę.

Na tej stronie

Porównanie w tabeli

#

Przykład

#
JavaScript
const modules = ['Wstęp', 'HTML', 'CSS', 'Grid']

const copy = modules.slice(1, 3)
const removed = modules.splice(1, 1)

console.log(copy)
console.log(removed)
console.log(modules)
Konsola
['HTML', 'CSS']
['HTML']
['Wstęp', 'CSS', 'Grid']

Definicja i zastosowanie

#

Nazwy są łudząco podobne, ale metody robią coś innego. slice(start, end) wycina fragment tablicy i zwraca go jako nową tablicę, nie dotykając oryginału. splice(start, deleteCount, ...items) zmienia oryginalną tablicę: usuwa wskazaną liczbę elementów od start i w ich miejsce może wstawić nowe.

slice() zawsze zwraca wycięty fragment, a splice() zwraca elementy, które usunęła (może to być pusta tablica, gdy nic nie usunięto). Indeksy ujemne w obu metodach liczą się od końca tablicy. Tylko splice() przyjmuje dodatkowe argumenty z elementami do wstawienia.

Wybór zależy od tego, czy chcesz zachować oryginał. Do kopiowania, paginacji i wycinków używaj slice(). Do usuwania lub wstawiania elementu w konkretnym miejscu użyj splice(), a jeśli nie chcesz mutować tablicy, sięgnij po jej nowszy odpowiednik toSpliced().

Składnia

#
Składnia
array.slice(start, end)
array.splice(start, deleteCount, item1, item2, …)

Więcej przykładów

#
splice() do wstawiania, slice() do podglądu końcówki
JavaScript
const list = ['HTML', 'CSS', 'JavaScript']

list.splice(1, 0, 'Sass')
console.log(list)
console.log(list.slice(-2))
Konsola
['HTML', 'Sass', 'CSS', 'JavaScript']
['CSS', 'JavaScript']
slice() nie mutuje nawet w skrajnych przypadkach
JavaScript
const original = ['Ania', 'Kuba']

const sliced = original.slice()
const splicedResult = original.splice(5, 2)

console.log(sliced)
console.log(splicedResult)
console.log(original)
console.log(sliced === original)
Konsola
['Ania', 'Kuba']
[]
['Ania', 'Kuba']
false

splice() poza zakresem tablicy nic nie usuwa i zwraca pustą tablicę. slice() bez argumentów tworzy płytką kopię, ale to inny obiekt niż oryginał.

Dobre praktyki

#
  • slice() nigdy nie mutuje, więc jest bezpieczna do kopii i paginacji nawet wewnątrz funkcji, które nie powinny zmieniać danych wejściowych.
  • Usuwając elementy przez splice() w pętli, idź od końca tablicy. Idąc od początku, kolejne indeksy się przesuwają i łatwo coś pominąć.
  • Gdy potrzebujesz efektu splice(), ale bez mutowania oryginału, użyj toSpliced().

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.