Array dan Object JavaScript: Mengelola Sekumpulan Data
Halo, Gabuters!
Pada artikel sebelumnya, kita sudah belajar tentang function JavaScript. Kita memahami cara membuat kode yang bisa digunakan kembali, menerima parameter, dan mengembalikan hasil menggunakan return.
Sekarang bayangkan kita sedang mengembangkan website BapakGabut.
Website kita mempunyai banyak artikel. Setiap artikel memiliki judul, kategori, jumlah pembaca, dan status publikasi.
Kalau setiap informasi disimpan dalam variabel terpisah, kode kita akan cepat menjadi panjang.
Contohnya:
const judulArtikel1 = "Belajar HTML";const judulArtikel2 = "Belajar CSS";const judulArtikel3 = "Belajar JavaScript";Untuk tiga artikel mungkin masih bisa dikelola.
Tetapi bagaimana kalau jumlahnya mencapai 100 artikel?
Kita membutuhkan cara yang lebih praktis untuk menyimpan dan mengolah sekumpulan data.
Di JavaScript, dua struktur yang paling sering digunakan untuk kebutuhan tersebut adalah array dan object.
Pada artikel ini, kita akan mempelajari keduanya dari dasar, kemudian mencoba mengolah daftar artikel menggunakan forEach(), map(), dan filter().
1. Apa Itu Array?
Array adalah object khusus dalam JavaScript yang digunakan untuk menyimpan kumpulan nilai secara berurutan.
Contohnya:
const kategori = ["HTML", "CSS", "JavaScript"];Dalam satu variabel, kita menyimpan tiga nilai sekaligus.
Nilai-nilai tersebut disebut elemen array.
Kita bisa menampilkan seluruh isinya:
console.log(kategori);Hasilnya akan terlihat seperti:
["HTML", "CSS", "JavaScript"]Array tidak harus berisi string.
Contohnya:
const jumlahArtikel = [5, 6, 8];const status = [true, false, true];JavaScript bahkan memungkinkan satu array berisi beberapa tipe data berbeda.
const dataCampuran = ["BapakGabut", 10, true];Namun, untuk data yang mempunyai tujuan serupa, menggunakan struktur yang konsisten biasanya lebih mudah dipahami dan dipelihara.
2. Mengakses Elemen Array
Setiap elemen array memiliki posisi yang disebut index.
Index array JavaScript dimulai dari 0, bukan 1.
Contohnya:
const kategori = ["HTML", "CSS", "JavaScript"];Posisinya:
| Index | Nilai |
|---|---|
| 0 | HTML |
| 1 | CSS |
| 2 | JavaScript |
Untuk mengambil nilai berdasarkan index, gunakan tanda kurung siku.
console.log(kategori[0]);console.log(kategori[1]);console.log(kategori[2]);Hasilnya:
HTMLCSSJavaScriptJika kita mencoba mengakses index yang tidak tersedia:
console.log(kategori[10]);Hasilnya:
undefinedIni berbeda dengan beberapa bahasa pemrograman yang langsung menghasilkan error ketika index berada di luar batas.
Mengubah nilai array
Elemen array juga dapat diubah.
const kategori = ["HTML", "CSS", "JavaScript"];
kategori[1] = "CSS Dasar";
console.log(kategori);Hasilnya:
["HTML", "CSS Dasar", "JavaScript"]Walaupun variabel kategori dibuat menggunakan const, elemen di dalam array masih dapat diubah.
const mencegah kita memberikan array baru kepada variabel tersebut, tetapi tidak otomatis membuat isi array menjadi tidak dapat dimodifikasi.
3. Mengenal length dan Method Dasar Array
Array mempunyai properti length untuk mengetahui panjangnya.
const kategori = ["HTML", "CSS", "JavaScript"];
console.log(kategori.length);Hasilnya:
3Kita juga bisa menggunakan length untuk mengambil elemen terakhir pada array yang tidak kosong.
console.log(kategori[kategori.length - 1]);Hasilnya:
JavaScriptSekarang kita kenal beberapa method dasar.
push(): Menambahkan elemen di akhir
const kategori = ["HTML", "CSS"];
kategori.push("JavaScript");
console.log(kategori);Hasilnya:
["HTML", "CSS", "JavaScript"]pop(): Menghapus elemen terakhir
const kategori = ["HTML", "CSS", "JavaScript"];
const terakhir = kategori.pop();
console.log(terakhir);console.log(kategori);Hasilnya:
JavaScript["HTML", "CSS"]pop() mengembalikan elemen yang dihapus.
includes(): Memeriksa keberadaan nilai
const kategori = ["HTML", "CSS", "JavaScript"];
console.log(kategori.includes("CSS"));console.log(kategori.includes("Python"));Hasilnya:
truefalseincludes() berguna ketika kita ingin mengetahui apakah sebuah nilai tersedia dalam array.
Untuk nilai primitif seperti string, pemeriksaannya relatif mudah. Untuk object, kita perlu memahami bahwa perbandingannya berdasarkan identitas referensi.
4. Mengulang Isi Array dengan for
Pada artikel perulangan JavaScript, kita sudah belajar menggunakan for.
Sekarang kita gunakan untuk mengakses seluruh elemen array.
const kategori = ["HTML", "CSS", "JavaScript"];
for (let i = 0; i < kategori.length; i++) { console.log(kategori[i]);}Hasilnya:
HTMLCSSJavaScriptPerhatikan kondisi:
i < kategori.lengthKarena index dimulai dari 0, kita menggunakan <, bukan <=.
Jika menggunakan <=, iterasi terakhir akan mencoba mengakses index yang tidak tersedia.
Menggunakan for…of
Untuk membaca nilai elemen tanpa membutuhkan index, kita bisa menggunakan for...of.
const kategori = ["HTML", "CSS", "JavaScript"];
for (const namaKategori of kategori) { console.log(namaKategori);}Hasilnya sama.
for...of sering terasa lebih sederhana ketika kita hanya membutuhkan nilai dari setiap elemen.
5. Mengenal Object
Sekarang bayangkan satu artikel memiliki beberapa informasi.
Misalnya:
- Judul artikel.
- Kategori.
- Jumlah pembaca.
- Status publikasi.
Kita bisa menyimpannya menggunakan object.
const artikel = { judul: "Belajar JavaScript", kategori: "Programming", pembaca: 150, sudahTerbit: true};Object menyimpan pasangan property key dan value.
Pada contoh tersebut:
juduladalah key dengan nilai"Belajar JavaScript".kategoriadalah key dengan nilai"Programming".pembacaadalah key dengan nilai150.sudahTerbitadalah key dengan nilaitrue.
Dengan object, informasi yang saling berkaitan dapat dikelompokkan dalam satu struktur.
6. Mengakses dan Mengubah Properti Object
Ada dua cara umum untuk mengakses properti object.
Dot notation
const artikel = { judul: "Belajar JavaScript", pembaca: 150};
console.log(artikel.judul);console.log(artikel.pembaca);Hasilnya:
Belajar JavaScript150Bracket notation
Kita juga bisa menggunakan tanda kurung siku.
console.log(artikel["judul"]);Hasilnya:
Belajar JavaScriptBracket notation berguna ketika nama properti disimpan dalam variabel.
const namaProperti = "pembaca";
console.log(artikel[namaProperti]);Hasilnya:
150Perhatikan perbedaannya:
artikel.namaPropertiMencari properti yang secara harfiah bernama namaProperti.
Sedangkan:
artikel[namaProperti]Menggunakan isi variabel namaProperti sebagai nama key.
Mengubah properti
const artikel = { judul: "Belajar JavaScript", pembaca: 150};
artikel.pembaca = 200;
console.log(artikel.pembaca);Hasilnya:
200Menambahkan properti
artikel.sudahTerbit = true;
console.log(artikel.sudahTerbit);Hasilnya:
trueSeperti array, object yang disimpan dalam variabel const masih bisa mengalami perubahan pada propertinya.
7. Perbedaan Array dan Object
Keduanya sama-sama dapat menyimpan kumpulan data, tetapi digunakan untuk kebutuhan yang berbeda.
| Array | Object |
|---|---|
| Menyimpan elemen secara berurutan | Menyimpan properti berdasarkan key |
| Umumnya diakses menggunakan index | Umumnya diakses menggunakan nama properti |
| Cocok untuk daftar nilai | Cocok untuk menggambarkan satu entitas |
| Contoh: daftar kategori | Contoh: detail satu artikel |
Misalnya:
const kategori = ["HTML", "CSS", "JavaScript"];Cocok menggunakan array karena berisi daftar kategori.
Sedangkan:
const artikel = { judul: "Belajar JavaScript", kategori: "Programming"};Cocok menggunakan object karena menggambarkan satu artikel.
Dalam praktiknya, kita sering menggabungkan keduanya.
8. Array Berisi Object
Sekarang kita mulai membuat struktur data yang lebih realistis.
Bayangkan website BapakGabut mempunyai beberapa artikel.
Kita bisa menyimpannya seperti ini:
const daftarArtikel = [ { judul: "Belajar HTML", kategori: "HTML", pembaca: 120, sudahTerbit: true }, { judul: "Belajar CSS", kategori: "CSS", pembaca: 90, sudahTerbit: true }, { judul: "Belajar JavaScript", kategori: "JavaScript", pembaca: 0, sudahTerbit: false }];Perhatikan strukturnya.
Bagian terluar menggunakan [], artinya kita mempunyai array.
Setiap elemen di dalamnya menggunakan {}, artinya setiap elemen merupakan object.
Dengan struktur ini, kita bisa menyimpan banyak artikel tanpa harus membuat variabel terpisah untuk setiap artikel.
Untuk mengakses artikel pertama:
console.log(daftarArtikel[0]);Untuk mengambil judul artikel pertama:
console.log(daftarArtikel[0].judul);Hasilnya:
Belajar HTMLStruktur array berisi object sangat sering digunakan dalam pengembangan aplikasi.
Nanti, ketika kita mulai mengambil data dari API, bentuk data seperti ini juga akan sering ditemui.
9. Menggunakan forEach()
Sekarang kita ingin menampilkan judul seluruh artikel.
Kita bisa menggunakan for, tetapi JavaScript menyediakan method array bernama forEach().
Contohnya:
const kategori = ["HTML", "CSS", "JavaScript"];
kategori.forEach(function (namaKategori) { console.log(namaKategori);});Hasilnya:
HTMLCSSJavaScriptforEach() menjalankan callback untuk setiap elemen array yang dikunjungi.
Callback adalah function yang diberikan kepada function atau method lain untuk dijalankan pada waktu tertentu.
Kita juga bisa menuliskannya menggunakan arrow function.
kategori.forEach((namaKategori) => { console.log(namaKategori);});Hasilnya sama.
Menggunakan forEach pada array object
const daftarArtikel = [ { judul: "Belajar HTML", sudahTerbit: true }, { judul: "Belajar CSS", sudahTerbit: true }, { judul: "Belajar JavaScript", sudahTerbit: false }];
daftarArtikel.forEach((artikel) => { console.log(artikel.judul);});Hasilnya:
Belajar HTMLBelajar CSSBelajar JavaScriptMenggunakan index pada forEach
Callback forEach() juga dapat menerima index.
const kategori = ["HTML", "CSS", "JavaScript"];
kategori.forEach((namaKategori, index) => { console.log(`${index + 1}. ${namaKategori}`);});Hasilnya:
1. HTML2. CSS3. JavaScriptPerlu diingat bahwa forEach() tidak menghasilkan array baru dari nilai yang dikembalikan callback.
Jika kita ingin membentuk array baru berdasarkan hasil pengolahan, map() biasanya lebih sesuai.
10. Menggunakan map()
Method map() digunakan untuk membentuk array baru berdasarkan hasil callback pada elemen-elemen array.
Contohnya:
const angka = [1, 2, 3, 4];
const hasil = angka.map((nilai) => { return nilai * 2;});
console.log(hasil);Hasilnya:
[2, 4, 6, 8]Array asli tetap berisi:
[1, 2, 3, 4]Pada contoh tersebut, map() membuat array baru yang berisi hasil perkalian setiap angka dengan 2.
map pada daftar artikel
Misalnya, kita ingin mengambil seluruh judul artikel.
const daftarArtikel = [ { judul: "Belajar HTML", kategori: "HTML" }, { judul: "Belajar CSS", kategori: "CSS" }, { judul: "Belajar JavaScript", kategori: "JavaScript" }];
const daftarJudul = daftarArtikel.map((artikel) => { return artikel.judul;});
console.log(daftarJudul);Hasilnya:
["Belajar HTML", "Belajar CSS", "Belajar JavaScript"]Kita juga bisa menggunakan implicit return pada arrow function.
const daftarJudul = daftarArtikel.map( (artikel) => artikel.judul);Hasilnya sama.
Apakah map selalu membuat data asli aman dari perubahan?
map() menghasilkan array baru, tetapi tidak otomatis membuat salinan mendalam dari setiap object di dalamnya.
Jika callback mengembalikan referensi object yang sama, perubahan terhadap object tersebut masih dapat memengaruhi data asli.
Jadi, bedakan antara membuat array baru dan membuat salinan seluruh object secara independen.
11. Menggunakan filter()
Method filter() digunakan untuk membuat array baru yang hanya berisi elemen yang memenuhi kondisi tertentu.
Contohnya:
const angka = [1, 2, 3, 4, 5, 6];
const angkaGenap = angka.filter((nilai) => { return nilai % 2 === 0;});
console.log(angkaGenap);Hasilnya:
[2, 4, 6]Callback mengembalikan kondisi:
nilai % 2 === 0Jika hasilnya truthy, elemen tersebut dimasukkan ke array baru.
Jika falsy, elemen tersebut tidak dimasukkan.
filter pada daftar artikel
Sekarang kita gunakan untuk mencari artikel yang sudah diterbitkan.
const daftarArtikel = [ { judul: "Belajar HTML", sudahTerbit: true }, { judul: "Belajar CSS", sudahTerbit: true }, { judul: "Belajar JavaScript", sudahTerbit: false }];
const artikelTerbit = daftarArtikel.filter((artikel) => { return artikel.sudahTerbit === true;});
console.log(artikelTerbit);Hasilnya berupa array berisi dua object:
[ { judul: "Belajar HTML", sudahTerbit: true }, { judul: "Belajar CSS", sudahTerbit: true }]Artikel JavaScript tidak ikut karena statusnya masih false.
Menggabungkan filter dan map
Kita juga bisa menggabungkan keduanya.
Misalnya, mengambil judul artikel yang sudah diterbitkan.
const judulArtikelTerbit = daftarArtikel .filter((artikel) => artikel.sudahTerbit) .map((artikel) => artikel.judul);
console.log(judulArtikelTerbit);Hasilnya:
["Belajar HTML", "Belajar CSS"]Pertama, filter() memilih artikel yang sudah terbit.
Kemudian, map() mengambil judul dari artikel-artikel tersebut.
Pola seperti ini sering digunakan untuk mengolah data aplikasi.
12. Perbedaan forEach, map, dan filter
Ketiga method ini sama-sama memproses elemen array, tetapi tujuannya berbeda.
| Method | Tujuan | Hasil |
|---|---|---|
forEach() | Menjalankan callback untuk setiap elemen | undefined |
map() | Mengubah setiap elemen menjadi nilai baru | Array baru |
filter() | Memilih elemen berdasarkan kondisi | Array baru |
Contohnya:
const angka = [1, 2, 3];Menggunakan forEach():
angka.forEach((nilai) => { console.log(nilai);});Menggunakan map():
const hasilMap = angka.map((nilai) => nilai * 2);
console.log(hasilMap);Menggunakan filter():
const hasilFilter = angka.filter((nilai) => nilai > 1);
console.log(hasilFilter);Hasil map():
[2, 4, 6]Hasil filter():
[2, 3]Gunakan forEach() ketika ingin melakukan suatu tindakan pada elemen.
Gunakan map() ketika ingin membentuk array baru dengan nilai hasil transformasi.
Gunakan filter() ketika ingin memilih sebagian elemen.
13. Mengenal Object.keys(), Object.values(), dan Object.entries()
Selain array, object juga mempunyai beberapa method yang membantu kita membaca datanya.
Contohnya:
const artikel = { judul: "Belajar JavaScript", kategori: "Programming", pembaca: 150};Object.keys()
Mengambil daftar key properti sendiri yang enumerable dan berupa string.
console.log(Object.keys(artikel));Hasilnya:
["judul", "kategori", "pembaca"]Object.values()
Mengambil daftar nilai properti sendiri yang enumerable dan berupa string key.
console.log(Object.values(artikel));Hasilnya:
["Belajar JavaScript", "Programming", 150]Object.entries()
Mengambil pasangan key dan value.
console.log(Object.entries(artikel));Hasilnya:
[ ["judul", "Belajar JavaScript"], ["kategori", "Programming"], ["pembaca", 150]]Kita juga bisa mengulang hasil Object.entries() menggunakan for...of.
for (const [key, value] of Object.entries(artikel)) { console.log(`${key}: ${value}`);}Hasilnya:
judul: Belajar JavaScriptkategori: Programmingpembaca: 150Penulisan [key, value] pada loop tersebut disebut destructuring.
Untuk sekarang, cukup pahami bahwa kita sedang mengambil dua nilai dari setiap pasangan hasil Object.entries().
14. Praktik: Mengolah Daftar Artikel BapakGabut
Sekarang kita gabungkan array, object, function, dan berbagai method yang sudah dipelajari.
Kita akan membuat program sederhana untuk:
- Menyimpan daftar artikel.
- Menampilkan seluruh judul.
- Memilih artikel yang sudah terbit.
- Menghitung jumlah artikel terbit.
- Menampilkan ringkasan.
Buka script.js, kemudian masukkan kode berikut:
const daftarArtikel = [ { judul: "Belajar HTML", kategori: "HTML", pembaca: 120, sudahTerbit: true }, { judul: "Belajar CSS", kategori: "CSS", pembaca: 90, sudahTerbit: true }, { judul: "Belajar JavaScript", kategori: "JavaScript", pembaca: 0, sudahTerbit: false }, { judul: "Mini Project CSS", kategori: "CSS", pembaca: 75, sudahTerbit: true }];
function ambilArtikelTerbit(artikel) { return artikel.filter((item) => item.sudahTerbit);}
function ambilJudulArtikel(artikel) { return artikel.map((item) => item.judul);}
function tampilkanRingkasan(artikel) { const artikelTerbit = ambilArtikelTerbit(artikel); const judulArtikel = ambilJudulArtikel(artikelTerbit);
console.log("=== Ringkasan BapakGabut ==="); console.log(`Total artikel: ${artikel.length}`); console.log(`Artikel terbit: ${artikelTerbit.length}`); console.log("Daftar artikel terbit:");
judulArtikel.forEach((judul, index) => { console.log(`${index + 1}. ${judul}`); });}
tampilkanRingkasan(daftarArtikel);Hasilnya:
=== Ringkasan BapakGabut ===Total artikel: 4Artikel terbit: 3Daftar artikel terbit:1. Belajar HTML2. Belajar CSS3. Mini Project CSSDari program tersebut, kita sudah menggunakan beberapa konsep sekaligus.
Array digunakan untuk menyimpan kumpulan artikel.
Object digunakan untuk menyimpan informasi setiap artikel.
Function digunakan untuk memisahkan tanggung jawab.
filter() memilih artikel yang sudah diterbitkan.
map() mengambil judul artikel.
forEach() menampilkan daftar judul ke Console.
Ini merupakan contoh sederhana bagaimana JavaScript dapat digunakan untuk mengolah data yang lebih terstruktur.
Data tersebut masih berupa contoh latihan, bukan data artikel sebenarnya dari website BapakGabut.
15. Kesalahan Umum Saat Menggunakan Array dan Object
Lupa bahwa index array dimulai dari 0
const kategori = ["HTML", "CSS", "JavaScript"];
console.log(kategori[1]);Hasilnya adalah:
CSSBukan "HTML".
Menganggap const membuat object tidak bisa berubah
const artikel = { judul: "Belajar HTML"};
artikel.judul = "Belajar CSS";Kode tersebut valid.
const mencegah assignment ulang terhadap variabel, bukan otomatis membekukan isi object.
Menggunakan map hanya untuk console.log
const angka = [1, 2, 3];
angka.map((nilai) => { console.log(nilai);});Kode tersebut berjalan, tetapi map() membuat array hasil yang berisi undefined karena callback tidak mengembalikan nilai.
Jika tujuannya hanya menjalankan console.log() untuk setiap elemen, gunakan forEach().
Mengira filter mengubah array asli
const angka = [1, 2, 3, 4];
const hasil = angka.filter((nilai) => nilai > 2);hasil berisi [3, 4], tetapi array angka tetap berisi [1, 2, 3, 4].
Membandingkan object hanya berdasarkan isi
console.log({ judul: "HTML" } === { judul: "HTML" });Hasilnya:
falseKedua object merupakan referensi yang berbeda.
16. Latihan Mandiri
Sekarang giliran Gabuters mencoba.
Buat array berisi minimal lima object artikel.
Setiap object mempunyai properti:
{ judul: "Nama artikel", kategori: "HTML", pembaca: 100, sudahTerbit: true}Kemudian lakukan latihan berikut:
- Tampilkan seluruh judul menggunakan
forEach(). - Gunakan
filter()untuk mengambil artikel yang sudah terbit. - Gunakan
map()untuk membuat array berisi judul artikel. - Cari artikel dengan jumlah pembaca lebih dari 100 menggunakan
filter(). - Tampilkan jumlah artikel yang sudah terbit menggunakan
length.
Sebagai tantangan tambahan, buat function bernama cariArtikelKategori() yang menerima dua parameter:
- Array daftar artikel.
- Nama kategori yang ingin dicari.
Function tersebut harus mengembalikan array artikel yang sesuai dengan kategori menggunakan filter().
Contoh pemanggilan:
const artikelCSS = cariArtikelKategori(daftarArtikel, "CSS");
console.log(artikelCSS);Coba juga gunakan map() setelah filter() untuk mengambil judul dari artikel pada kategori tertentu.
17. Penutup
Pada artikel ini, kita sudah belajar menggunakan array dan object untuk menyimpan kumpulan data.
Kita memahami index array, properti object, serta cara mengakses dan mengubah nilainya.
Kita juga mengenal method push(), pop(), includes(), forEach(), map(), dan filter().
Kemudian, kita mencoba menggabungkan array, object, function, dan perulangan untuk mengolah daftar artikel BapakGabut.
Sekarang kita sudah mempunyai fondasi yang cukup untuk membuat program yang mengolah data.
Tetapi sejauh ini, hasil latihan kita masih banyak ditampilkan melalui Console.
Bagaimana kalau kita ingin menampilkan daftar artikel langsung di halaman HTML?
Atau mengubah teks ketika sebuah tombol diklik?
Untuk itulah kita perlu memahami DOM dan event.
Pada artikel berikutnya, kita akan membahas DOM dan Event JavaScript: Membuat HTML Bisa Berinteraksi.
Kita akan belajar memilih elemen HTML, mengubah kontennya, menangani klik tombol, dan membaca input pengguna.
Sampai jumpa di artikel berikutnya, Gabuters!
JavaScript
SelesaiBagikan Artikel
Buat poster berbagi atau salin tautan artikel ini.
Lanjut membaca
Coba jalur lain
Pilihan konsisten dari artikel lain
Terakhir diperbarui pada , 21 hari yang lalu
Sebagian konten mungkin sudah tidak berlaku