Cara mengatasi splice menghapus data salah javascript adalah cek dulu indeks awal dan jumlah hapus sebelum kode dijalankan. Pola splice(index, deleteCount) sering meleset karena indeks dihitung dari 0, bukan dari 1. Cetak isi array dan nilai indeks, lalu pastikan deleteCount berisi 1 bila hanya ingin menghapus satu item.
Kenapa Splice Menghapus Data yang Salah
Array.prototype.splice() berjalan langsung di browser maupun Node.js dan mengubah array aslinya. Kesalahan umumnya bukan bug JavaScript, melainkan logic error pada argumen yang dikirim.
- Indeks mulai dari 0, jadi posisi kedua berarti indeks 1.
- Argumen kedua menentukan jumlah item yang terhapus, bukan posisi akhir.
- Indeks negatif dihitung dari akhir array, contoh -1 berarti elemen terakhir.
- Pemanggilan tanpa argumen kedua menghapus semua item dari indeks tersebut sampai akhir.
Tabel Cek Kondisi Splice yang Salah Hapus
Periksa tiga kondisi berikut sebelum mengubah kode lebih jauh.
| Kondisi | Penyebab | Solusi |
|---|---|---|
| Indeks meleset satu posisi | Menganggap indeks mulai dari 1 | Kurangi 1 dari nomor urutan tampilan |
| Terhapus terlalu banyak | deleteCount kebesaran atau kosong | Isi deleteCount dengan 1 untuk satu item |
| Item terakhir ikut terhapus | findIndex mengembalikan -1 | Batalkan splice bila indeks bernilai -1 |
Cara Memperbaiki Splice Agar Tepat Sasaran
Gunakan langkah berurutan ini supaya target penghapusan terlihat jelas.
1. Cetak array dan indeks target dengan console.log.
2. Cari indeks memakai indexOf atau findIndex, lalu pastikan nilainya bukan -1.
3. Panggil splice(index, 1) sesuai kebutuhan.
4. Bila array asli tidak boleh berubah, pakai toSpliced, slice, atau filter.
// Salah: menghapus dua item karena deleteCount keliru
const buahSalah = ["apel", "mangga", "jeruk", "anggur"];
buahSalah.splice(1, 2);
console.log(buahSalah); // ["apel", "anggur"]
// Benar: hanya menghapus "mangga"
const buahBenar = ["apel", "mangga", "jeruk", "anggur"];
const target = buahBenar.indexOf("mangga");
if (target !== -1) {
buahBenar.splice(target, 1);
}
console.log(buahBenar); // ["apel", "jeruk", "anggur"]
Kode benar terlebih dahulu memastikan target ditemukan. Pengecekan !== -1 mencegah indeks tidak valid berubah menjadi penghapusan dari akhir array.
Cara Mencegah Salah Hapus Berikutnya
- Validasi batas indeks dengan memeriksa
index >= 0 && index < array.length. - Salin array memakai
[...array]untuk operasi hapus sementara atau pratinjau. - Pakai
filteruntuk menghapus berdasar kondisi, bukan posisi numerik.
FAQ
Kenapa splice(2, 1) menghapus item ketiga?
Karena indeks 2 menunjuk posisi ketiga dalam perhitungan nol, sehingga satu item pada posisi tersebut yang terhapus.
Bagaimana membatalkan efek splice yang sudah berjalan?
Tidak bisa dibatalkan otomatis, jadi simpan salinan array sebelum splice bila data lama masih dibutuhkan.
Kapan memakai filter daripada splice?
Pakai filter bila penghapusan berdasar nilai atau kondisi dan array asli sebaiknya tetap utuh.