Sort Error Padahal Kode Terlihat Benar? Cara Mengatasi Sort Is Not A Function Javascript

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 di JSON.parse(), jadi masih string.
  • Hasil querySelectorAll() berupa NodeList lalu langsung di .sort().
  • Nilai null atau undefined karena 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:

  1. Cetak datanya dengan console.log(data) dan cek Array.isArray(data).
  2. Normalisasi data menjadi array sesuai bentuk aslinya.
  3. 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.