Perbaikan tercepat untuk object is not iterable adalah berhenti melempar plain object ke for...of. Ubah dulu object jadi array dengan Object.entries(user), Object.values(user), atau Object.keys(user), baru loop. Error TypeError: object is not iterable muncul karena for...of, spread [...data], dan destructuring array butuh protokol iterable.
Kenapa Object Memicu Error Not Iterable
Plain object seperti {nama: "Andi", umur: 20} tidak punya Symbol.iterator. Browser dan Node.js menolak object itu saat dipakai di posisi iterable. Array, string, Map, dan Set bisa langsung di-loop karena mereka iterable bawaan.
- Gunakan
typeof datauntuk memastikan data benar object, bukan string atau number. - Gunakan
Array.isArray(data)sebelummap,for...of, atau spread array. - Cetak
console.log(data)karena response API sering berbentuk{data: [...]}, bukan array langsung.
Tabel Troubleshooting Object is Not Iterable
Error/Kondisi | Penyebab | Solusi
skillet tabel berikut merangkum kasus paling sering:
| for…of ke object | plain object tidak iterable | pakai for…of Object.entries(obj) |
|---|---|---|
| […]objekUser | spread array butuh iterable | pakai {…objekUser} atau Object.values(obj) |
| response API dikira array | API kirim object berisi array | akses response.data lalu loop arraynya |
Cara Memperbaiki dengan Object.entries, Values, dan Keys
Ikuti urutan ini supaya tidak salah konversi:
1. Identifikasi bentuk data lewat console.log.
2. Pilih konversi sesuai kebutuhan key atau value.
3. Tulis ulang loop memakai hasil array tersebut.
// SALAH
const user = { nama: "Andi", kota: "Solo" };
for (const item of user) {
console.log(item);
}
// BENAR
for (const [key, value] of Object.entries(user)) {
console.log(key, value);
}
for (const value of Object.values(user)) {
console.log(value);
}
- Pakai
entrieskalau butuh pasangan key dan value. - Pakai
keyskalau hanya butuh nama properti. - Pakai
valueskalau hanya butuh isi data. - Pakai
Array.fromhanya untuk array-like sepertiargumentsatau NodeList, bukan plain object.
Cara Mencegah Error Terulang
- Validasi
Array.isArray(data)sebelum memanggilmap,filter,for...of, atau[...data]. - Normalisasi response Fetch/API menjadi array sejak awal, misalnya ambil
result.items || []. - Bedakan TypeError ini dengan
Cannot read properties of undefined. Yang pertama salah tipe iterable, yang kedua properti diakses dari data kosong.
FAQ
Apakah semua object bisa dibuat iterable dengan for…of?
Tidak. Plain object harus dikonversi dulu memakai Object.entries, keys, atau values.
Kapan memakai Object.entries dibanding Object.values?
Pakai entries bila key dibutuhkan, pakai values bila hanya isi yang diproses.
Kenapa spread object […] tetap error padahal {…} berhasil?
[...] membutuhkan iterable, sedangkan {...} menyalin properti object enumerable.