2158 kata
11 menit

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:

IndexNilai
0HTML
1CSS
2JavaScript

Untuk mengambil nilai berdasarkan index, gunakan tanda kurung siku.

console.log(kategori[0]);
console.log(kategori[1]);
console.log(kategori[2]);

Hasilnya:

HTML
CSS
JavaScript

Jika kita mencoba mengakses index yang tidak tersedia:

console.log(kategori[10]);

Hasilnya:

undefined

Ini 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:

3

Kita juga bisa menggunakan length untuk mengambil elemen terakhir pada array yang tidak kosong.

console.log(kategori[kategori.length - 1]);

Hasilnya:

JavaScript

Sekarang 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:

true
false

includes() 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:

HTML
CSS
JavaScript

Perhatikan kondisi:

i < kategori.length

Karena 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:

  • judul adalah key dengan nilai "Belajar JavaScript".
  • kategori adalah key dengan nilai "Programming".
  • pembaca adalah key dengan nilai 150.
  • sudahTerbit adalah key dengan nilai true.

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 JavaScript
150

Bracket notation#

Kita juga bisa menggunakan tanda kurung siku.

console.log(artikel["judul"]);

Hasilnya:

Belajar JavaScript

Bracket notation berguna ketika nama properti disimpan dalam variabel.

const namaProperti = "pembaca";
console.log(artikel[namaProperti]);

Hasilnya:

150

Perhatikan perbedaannya:

artikel.namaProperti

Mencari 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:

200

Menambahkan properti#

artikel.sudahTerbit = true;
console.log(artikel.sudahTerbit);

Hasilnya:

true

Seperti 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.

ArrayObject
Menyimpan elemen secara berurutanMenyimpan properti berdasarkan key
Umumnya diakses menggunakan indexUmumnya diakses menggunakan nama properti
Cocok untuk daftar nilaiCocok untuk menggambarkan satu entitas
Contoh: daftar kategoriContoh: 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 HTML

Struktur 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:

HTML
CSS
JavaScript

forEach() 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 HTML
Belajar CSS
Belajar JavaScript

Menggunakan 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. HTML
2. CSS
3. JavaScript

Perlu 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 === 0

Jika 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.

MethodTujuanHasil
forEach()Menjalankan callback untuk setiap elemenundefined
map()Mengubah setiap elemen menjadi nilai baruArray baru
filter()Memilih elemen berdasarkan kondisiArray 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 JavaScript
kategori: Programming
pembaca: 150

Penulisan [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:

  1. Menyimpan daftar artikel.
  2. Menampilkan seluruh judul.
  3. Memilih artikel yang sudah terbit.
  4. Menghitung jumlah artikel terbit.
  5. 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: 4
Artikel terbit: 3
Daftar artikel terbit:
1. Belajar HTML
2. Belajar CSS
3. Mini Project CSS

Dari 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:

CSS

Bukan "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:

false

Kedua 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:

  1. Tampilkan seluruh judul menggunakan forEach().
  2. Gunakan filter() untuk mengambil artikel yang sudah terbit.
  3. Gunakan map() untuk membuat array berisi judul artikel.
  4. Cari artikel dengan jumlah pembaca lebih dari 100 menggunakan filter().
  5. 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

Selesai

Bagian 6 dari 8Tulisan ini bagian dari seri

Bagikan Artikel

Buat poster berbagi atau salin tautan artikel ini.

Lanjut membaca

Bacaan terkait

Berdasarkan tag dan kategori yang sama

Coba jalur lain

Pilihan konsisten dari artikel lain