Pesan sort is not a function berarti kode memanggil .sort() pada nilai yang bukan array. Perbaikan tercepat: cek tipe datanya dengan Array.isArray(data), lalu ubah dulu ke array sebelum diurutkan.
JavaScript hanya menyediakan .sort() untuk Array. String, object biasa, null, undefined, NodeList, dan HTMLCollection tidak punya method tersebut sehingga muncul TypeError. Ini runtime error, bukan logic error seperti comparator yang salah.
Kenapa Sort Is Not A Function Muncul di JavaScript
Penyebab paling sering:
- Data dikira array, ternyata string atau object dari API.
localStorage.getItem()belum diJSON.parse(), jadi masih string.- Hasil
querySelectorAll()berupaNodeListlalu langsung di.sort(). - Nilai
nullatauundefinedkarena fetch gagal atau properti salah nama. - Object di-spread ke object lagi, bukan ke array.
Tabel Diagnosa Cepat Berdasarkan Kondisi Data
Gunakan typeof data dan Array.isArray(data) untuk memastikan bentuk data sebelum sort.
| Error/Kondisi | Penyebab | Solusi |
|---|---|---|
| Data dari API tidak bisa di-sort | Respons berupa object, bukan array | Ambil properti array-nya dahulu |
| Data localStorage error | Masih JSON string | Gunakan JSON.parse() lalu cek array |
| Hasil querySelectorAll error | Nilainya NodeList | Ubah dengan Array.from() |
Langkah Memperbaiki Sort yang Error
Ikuti urutan ini agar sumber masalah ketahuan:
- Cetak datanya dengan
console.log(data)dan cekArray.isArray(data). - Normalisasi data menjadi array sesuai bentuk aslinya.
- Baru panggil
.sort()dengan comparator yang tepat.
// SALAH: data masih string
const data = "[3, 1, 2]";
data.sort();
// BENAR: parse dulu menjadi array
const list = JSON.parse("[3, 1, 2]");
list.sort((a, b) => a - b);
console.log(list); // [1, 2, 3]
// Array-like dari DOM
const nodes = document.querySelectorAll("li");
const items = Array.from(nodes);
items.sort((a, b) =>
a.textContent.localeCompare(b.textContent)
);
Comparator (a, b) => a - b cocok untuk angka. Untuk string gunakan localeCompare(). Array.from() mengubah array-like menjadi array asli. Spread {...data} tetap menghasilkan object, jadi tidak memperbaiki error.
Cara Mencegah Error Sort Terulang
- Validasi dulu:
if (!Array.isArray(list)) return; - Pastikan hasil
JSON.parse()benar-benar array sebelum dipakai. - Buat salinan dengan
[...list].sort()agar array asli tidak ikut berubah. - Periksa bentuk respons API karena kadang datanya ada di properti seperti
response.data.items.
FAQ
Apakah string punya method sort di JavaScript?
Tidak. String tidak punya .sort(); ubah string menjadi array dulu bila perlu diurutkan.
Kenapa angka terurut aneh setelah sort diperbaiki?
Karena sort() default membandingkan sebagai string, jadi gunakan comparator (a, b) => a - b.
Apakah perlu cek Array.isArray setiap panggil sort?
Perlu untuk data dari API, localStorage, dan DOM karena bentuknya bisa berubah tanpa disadari.