Array menyimpan banyak nilai dalam satu urutan, dan topik ini menelaah perilakunya lebih dalam dari sekadar menaruh dan mengambil. Materinya mencakup indeks yang mulai dari nol, tiga jebakan pada properti length, array bersarang sampai tabel dua dimensi kecil, serta peralatan pemeriksaan seperti Array.isArray, at, indexOf, dan includes. Seluruh contoh memakai rekap nilai ujian dan nama bulan yang angkanya mudah dihitung ulang, dan semuanya berjalan di Node.js sehingga keluarannya dapat direproduksi.
Indeks mulai dari nol#
Posisi elemen array diberi nomor mulai dari nol, sehingga elemen pertama berada di indeks 0 dan elemen terakhir berada di indeks length dikurangi satu. Angka awal nol ini sering menjadi sumber kebingungan bagi pemula, tetapi konsekuensinya konsisten di seluruh bahasa JavaScript. Membaca indeks di luar jangkauan tidak melempar error, melainkan mengembalikan undefined.
// Indeks elemen pertama adalah 0, bukan 1.
const bulan = ["Januari", "Februari", "Maret"];
console.log(bulan[0]);
console.log(bulan[2]);
console.log(bulan[3]);
console.log(bulan.length);Januari
Maret
undefined
3Baris ketiga memperlihatkan batas array, bulan[3] berada di luar tiga elemen yang ada sehingga hasilnya undefined, bukan pesan error. Angka nol sebagai awal bukan pilihan acak, indeks menyatakan jarak dari awal array, dan jarak elemen pertama dari dirinya sendiri memang nol. Cara pandang ini sekaligus menjelaskan rumus elemen terakhir, jarak maksimumnya adalah jumlah elemen dikurangi satu. Properti length selalu menyatakan jumlah elemen, dan selisih satu dengan indeks terakhir itulah yang sering tertukar. Kebiasaan yang sehat adalah menulis bulan.length - 1 untuk elemen terakhir, atau memakai metode at yang dibahas pada bagian akhir.
Tiga jebakan length#
Properti length bukan sekadar pembaca jumlah elemen, melainkan angka yang mengikuti isi array dan boleh ditulis. Tiga perilakunya sering mengejutkan. Pertama, menugaskan pada indeks yang sama dengan length menambah elemen di ujung. Kedua, menugaskan length yang lebih kecil memotong array dari belakang. Ketiga, indeks yang melompat menciptakan celah kosong yang tetap terhitung.
// Length mengikuti indeks tertinggi ditambah satu, dan bisa diubah.
const nilai = [88, 92, 79];
console.log(nilai.length);
console.log(nilai[nilai.length - 1]);
nilai[nilai.length] = 75; // menempel di ujung, sama seperti push
console.log(nilai.length);
console.log(nilai);
nilai.length = 2; // memotong array dari belakang
console.log(nilai);3
79
4
[ 88, 92, 79, 75 ]
[ 88, 92 ]Keluaran di atas memperagakan dua perilaku pertama secara berurutan. Elemen 75 menempel lewat indeks length, lalu length dipotong menjadi dua dan arraynya tinggal [88, 92], dua elemen di belakangnya hilang tanpa dapat dikembalikan. Pola array[array.length] = x benar dan pernah menjadi cara lazim menambah elemen, tetapi push lebih jelas maksudnya sehingga lebih dipilih saat ini.
Celah kosong muncul ketika indeks diloncatkan, misalnya menulis array dengan koma kosong atau menugaskan indeks jauh di depan. Array seperti ini disebut array jarang, dan celahnya tetap dihitung oleh length.
// Array jarang: celah kosong tetap terhitung oleh length.
const jarang = [88, , 79];
console.log(jarang.length);
console.log(jarang[1]);
jarang[9] = 60;
console.log(jarang.length);
console.log(jarang[8]);3
undefined
10
undefinedjarang memuat tiga posisi yang terhitung, tetapi posisi tengahnya tidak pernah diisi dan pembacaannya menghasilkan undefined. Susunan seperti ini disebut array jarang (sparse array), yaitu array dengan celah yang tidak pernah diisi di antara elemennya. Setelah indeks 9 diisi, length melompat menjadi 10 padahal isinya baru tiga nilai, dan pembacaan pada celah 8 tetap undefined. Array jarang lebih sering muncul karena kelalaian daripada disengaja, dan sebagian metode array memperlakukan celahnya secara tidak seragam.
Array bersarang dan tabel dua dimensi#
Elemen array boleh berupa array lain, dan susunan dua tingkat seperti ini disebut array dua dimensi. Aksesnya ditulis dua pasang kurung siku berturut-turut, indeks pertama memilih baris, sedangkan indeks kedua memilih kolom di dalam barisnya. Bentuk yang paling sering dipakai adalah tabel kecil, misalnya rekap nilai ujian per siswa dengan baris berisi nama dan nilai-nilainya.
// Array dua dimensi: baris dan kolom untuk rekap nilai ujian.
const tabelNilai = [
["Ani", 88, 92],
["Budi", 79, 85],
["Citra", 91, 84],
];
console.log(tabelNilai.length);
console.log(tabelNilai[0]);
console.log(tabelNilai[1][0]);
console.log(tabelNilai[2][1]);3
[ 'Ani', 88, 92 ]
Budi
91tabelNilai.length menghitung jumlah baris, sedangkan tabelNilai[0] menghasilkan baris pertama yang juga berupa array. Akses [1][0] memilih baris kedua lalu kolom pertamanya, dan hasilnya nama Budi. Akses [2][1] memilih baris ketiga kolom kedua, yaitu nilai 91. Array dua dimensi tidak harus kotak sempurna, panjang tiap baris boleh berbeda karena setiap barisnya array tersendiri. Perhatikan juga urutannya, [1][0] berbeda dengan [0][1], dan satu kesalahan urutan membaca sel yang salah tanpa pesan apa pun. Dengan dua indeks ini, sel mana pun pada tabel dapat dibaca, dan pola yang sama berlaku untuk papan permainan maupun denah tempat duduk.
Memeriksa tipe dan mencari elemen#
typeof tidak dapat membedakan array dari object lain, jawabannya selalu object untuk keduanya. Alat yang tepat adalah Array.isArray, yang mengembalikan true hanya untuk array sungguhan. Untuk membaca elemen dari ujung, metode at menerima indeks negatif yang dihitung dari belakang, sehingga at(-1) selalu berarti elemen terakhir. Pencarian isi array ada dua cara ringkas, indexOf mengembalikan posisi pertama yang cocok atau -1 bila tidak ada, sedangkan includes mengembalikan true atau false.
// Memeriksa tipe dan isi array.
const daftar = [12, 24, 36];
console.log(typeof daftar);
console.log(Array.isArray(daftar));
console.log(Array.isArray("bukan array"));
console.log(daftar.at(-1));
console.log(daftar.indexOf(24));
console.log(daftar.includes(48));object
true
false
36
1
falseKeluaran menegaskan bahwa typeof daftar bernilai object, padahal Array.isArray menilainya sebagai array sungguhan. Pembedaan ini penting saat data datang dari luar, misalnya respons yang bisa berupa daftar panjang atau satu catatan saja. Pemeriksaan dengan Array.isArray sebaiknya dilakukan sebelum metode array dipakai, karena memanggil metode array pada object biasa berakhir dengan TypeError. Indeks negatif pada at menghasilkan 36 tanpa perlu menulis length dikurangi satu. Pencarian 24 menemukan posisi 1, sedangkan 48 tidak ada sehingga includes mengembalikan false. Kedua metode pencarian membandingkan nilai secara ketat, sehingga mencari teks "24" pada array angka tidak akan pernah cocok.
Ringkasan#
- Indeks array mulai dari 0, elemen terakhir berada di
length - 1, dan pembacaan di luar jangkauan menghasilkanundefinedtanpa error. lengthbisa ditulis, menugaskan pada indekslengthmenambah elemen, menugaskanlengthyang lebih kecil memotong array, dan indeks yang melompat menciptakan celah kosong.- Array dua dimensi diakses dengan dua indeks berturut-turut, baris dahulu lalu kolom, seperti pada tabel nilai ujian.
typeofselalu menjawabobjectuntuk array sehingga pemeriksaannya memakaiArray.isArray, sementaraat(-1),indexOf, danincludesmembaca ujung serta mencari isi dengan cepat.
Referensi#
- Array — MDN Web Docs
— Referensi properti dan metode array, termasuk
length,at,indexOf, danincludes. - Arrays — javascript.info
— Bab array beserta perilaku
lengthdan pencarian elemen. - Indexed collections — MDN Web Docs — Panduan koleksi berindeks, termasuk array bersarang.