Arrays & Objects dalam JavaScript

| JavaScript | javascript, tutorial, arrays, objects

Arrays & Objects dalam JavaScript

Bayangkan Anda sedang membangun aplikasi toko online. Anda perlu menyimpan daftar produk, data profil pengguna, dan keranjang belanja. Menyimpan semua data di variabel terpisah? Itu tidak praktis.

Arrays dan objects adalah dua struktur data fundamental yang menjadi solusi untuk masalah ini. Array menyimpan data dalam format list, sementara objects menyimpan data dalam format key-value. Keduanya sering digunakan bersamaan untuk mengelola data kompleks.

Di artikel ini, kita akan mempelajari cara membuat dan menggunakan arrays, berbagai methods untuk memanipulasi array, objects dan properties-nya, destructuring, spread operator, dan JSON. Setelah membaca ini, Anda akan mampu bekerja dengan data kompleks dalam JavaScript.

1. Array: Menyimpan Data dalam List

Array adalah kumpulan data yang tersusun dalam index urutan. Setiap elemen dalam array memiliki posisi yang bisa diakses melalui index, mulai dari 0.

// Membuat array
const buah = ["apel", "mangga", "jeruk", "mangga"];

// Akses elemen berdasarkan index
console.log(buah[0]);  // Output: apel
console.log(buah[2]);  // Output: jeruk

// Panjang array
console.log(buah.length);  // Output: 4

// Mengubah elemen
buah[1] = "pisang";
console.log(buah);  // Output: ["apel", "pisang", "jeruk", "mangga"]

Array bisa menyimpan berbagai tipe data — string, number, boolean, bahkan array lain dan objects. Tidak ada batasan tipe data dalam satu array.

// Array bisa menyimpan berbagai tipe data
const campur = [1, "dua", true, null, { nama: "Dika" }];
console.log(campur[4].nama);  // Output: Dika

2. Array Methods: Tools untuk Manipulasi Array

JavaScript menyediakan berbagai methods yang memudahkan manipulasi array. Berikut adalah methods yang paling sering digunakan:

Menambah & Menghapus Elemen

const fruits = ["apel", "mangga"];

// push() — tambah di akhir
fruits.push("jeruk");
console.log(fruits);  // Output: ["apel", "mangga", "jeruk"]

// pop() — hapus dari akhir
const terakhir = fruits.pop();
console.log(terakhir);  // Output: jeruk

// unshift() — tambah di awal
fruits.unshift("pisang");
console.log(fruits);  // Output: ["pisang", "apel", "mangga"]

// shift() — hapus dari awal
const pertama = fruits.shift();
console.log(pertama);  // Output: pisang

Iterating (Melakukan Sesuatu pada Setiap Elemen)

const angka = [10, 20, 30, 40, 50];

// forEach() — eksekusi function pada setiap elemen
angka.forEach((angka, index) => {
  console.log(`Index ${index}: ${angka}`);
});
// Output:
// Index 0: 10
// Index 1: 20
// Index 2: 30
// Index 3: 40
// Index 4: 50

map(), filter(), dan find()

const angka = [1, 2, 3, 4, 5, 6, 7, 8];

// map() — transformasi setiap elemen, menghasilkan array baru
const kuadrat = angka.map(a => a * a);
console.log(kuadrat);  // Output: [1, 4, 9, 16, 25, 36, 49, 64]

// filter() — ambil elemen yang memenuhi kondisi
const ganjil = angka.filter(a => a % 2 !== 0);
console.log(ganjil);  // Output: [1, 3, 5, 7]

// find() — cari satu elemen pertama yang memenuhi kondisi
const pertamaGanjil = angka.find(a => a % 2 !== 0);
console.log(pertamaGanjil);  // Output: 1

reduce()

const angka = [1, 2, 3, 4, 5];

// reduce() — akumulasi semua elemen jadi satu nilai
const total = angka.reduce((akumulator, angka) => {
  return akumulator + angka;
}, 0);

console.log(total);  // Output: 15

some() dan every()

const umur = [18, 22, 15, 30, 12];

// some() — cek apakah ADA setidaknya satu elemen yang memenuhi kondisi
const adaAnak = umur.some(u => u < 18);
console.log(adaAnak);  // Output: true

// every() — cek apakah SEMUA elemen memenuhi kondisi
const semuaDewasa = umur.every(u => u >= 18);
console.log(semuaDewasa);  // Output: false

3. Object: Menyimpan Data dengan Key-Value

Object adalah struktur data yang menyimpan data dalam format key-value. Berbeda dengan array yang menggunakan index, object menggunakan key (atau property) untuk mengakses nilainya.

// Membuat object
const siswa = {
  nama: "Dika",
  umur: 22,
  jurusan: "Teknik Informatika",
  lulus: false
};

// Akses property dengan dot notation
console.log(siswa.nama);  // Output: Dika

// Akses property dengan bracket notation
console.log(siswa["jurusan"]);  // Output: Teknik Informatika

// Mengubah property
siswa.umur = 23;
console.log(siswa.umur);  // Output: 23

// Menambah property baru
siswa.nim = "12345678";
console.log(siswa.nim);  // Output: 12345678

// Menghapus property
delete siswa.lulus;
console.log(siswa);  // Output: { nama: "Dika", umur: 23, jurusan: "Teknik Informatika", nim: "12345678" }

Bracket vs Dot Notation

Dot notation (siswa.nama) lebih simpel dan sering digunakan. Bracket notation (siswa["nama"]) diperlukan ketika key dinamis atau mengandung spasi:

const data = {
  "nama lengkap": "Andika Rekatias",
  umur: 22
};

// Bracket notation untuk key dengan spasi
console.log(data["nama lengkap"]);  // Output: Andika Rekatias

// Bracket notation untuk key dinamis
const key = "umur";
console.log(data[key]);  // Output: 22

4. Iterating Object

Untuk iterasi pada object, kita bisa menggunakan beberapa methods:

const mahasiswa = {
  nama: "Dika",
  umur: 22,
  jurusan: "Teknik Informatika"
};

// Object.keys() — array of keys
console.log(Object.keys(mahasiswa));  // Output: ["nama", "umur", "jurusan"]

// Object.values() — array of values
console.log(Object.values(mahasiswa));  // Output: ["Dika", 22, "Teknik Informatika"]

// Object.entries() — array of [key, value] pairs
console.log(Object.entries(mahasiswa));
// Output: [["nama", "Dika"], ["umur", 22], ["jurusan", "Teknik Informatika"]]

// for...in loop
for (const key in mahasiswa) {
  console.log(`${key}: ${mahasiswa[key]}`);
}
// Output:
// nama: Dika
// umur: 22
// jurusan: Teknik Informatika

5. Destructuring: Unpacking Data dengan Elegan

Destructuring memungkinkan Anda mengambil nilai dari array atau object dan menyimpannya ke variabel secara langsung, tanpa perlu menulis satu per satu.

Array Destructuring

const buah = ["apel", "mangga", "jeruk"];

// Tanpa destructuring
const pertama = buah[0];
const kedua = buah[1];

// Dengan destructuring
const [a, b, c] = buah;
console.log(a);  // Output: apel
console.log(b);  // Output: mangga
console.log(c);  // Output: jeruk

// Skip elemen
const [satu, , tiga] = buah;
console.log(satu);  // Output: apel
console.log(tiga);  // Output: jeruk

// Rest element
const [first, ...sisanya] = buah;
console.log(first);   // Output: apel
console.log(sisanya); // Output: ["mangga", "jeruk"]

Object Destructuring

const siswa = {
  nama: "Dika",
  umur: 22,
  jurusan: "Teknik Informatika",
  kota: "Jakarta"
};

// Destructuring object
const { nama, umur, jurusan } = siswa;
console.log(nama);     // Output: Dika
console.log(umur);     // Output: 22
console.log(jurusan);  // Output: Teknik Informatika

// Ganti nama variabel
const { nama: namaSiswa, kota: asalKota } = siswa;
console.log(namaSiswa);  // Output: Dika
console.log(asalKota);   // Output: Jakarta

// Default value
const { usia = 0, gender = "tidak diketahui" } = siswa;
console.log(usia);     // Output: 0
console.log(gender);   // Output: tidak diketahui

6. Spread Operator: Menyebar Data

Spread operator (...) memungkinkan Anda menyebar elemen array atau object ke tempat lain. Sangat berguna untuk menggabungkan atau menyalin data.

Spread pada Array

const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];

// Menggabungkan array
const gabungan = [...arr1, ...arr2];
console.log(gabungan);  // Output: [1, 2, 3, 4, 5, 6]

// Menyalin array
const salinan = [...arr1];
console.log(salinan);  // Output: [1, 2, 3]

// Menambah elemen
const denganBaru = [...arr1, 99, 100];
console.log(denganBaru);  // Output: [1, 2, 3, 99, 100]

Spread pada Object

const profil = { nama: "Dika", umur: 22 };
const lokasi = { kota: "Jakarta", negara: "Indonesia" };

// Menggabungkan object
const lengkap = { ...profil, ...lokasi };
console.log(lengkap);
// Output: { nama: "Dika", umur: 22, kota: "Jakarta", negara: "Indonesia" }

// Menambah/mengubah property
const updated = { ...profil, umur: 23, email: "[email protected]" };
console.log(updated);
// Output: { nama: "Dika", umur: 23, email: "[email protected]" }

7. JSON: Format Pertukaran Data Universal

JSON (JavaScript Object Notation) adalah format teks untuk pertukaran data antara client dan server. Hampir semua API mengembalikan data dalam format JSON.

Konversi ke JSON

const produk = {
  id: 1,
  nama: "Laptop ASUS",
  harga: 12000000,
  spesifikasi: {
    ram: "16GB",
    storage: "512GB SSD"
  }
};

// Konversi object ke JSON string
const json = JSON.stringify(produk);
console.log(json);
// Output: {"id":1,"nama":"Laptop ASUS","harga":12000000,"spesifikasi":{"ram":"16GB","storage":"512GB SSD"}}

// JSON string yang formatted (mudah dibaca)
const jsonFormatted = JSON.stringify(produk, null, 2);
console.log(jsonFormatted);

Konversi dari JSON

const jsonString = '{"nama":"Dika","umur":22,"hobi":["coding","gaming"]}';

// Konversi JSON string ke object
const data = JSON.parse(jsonString);
console.log(data.nama);    // Output: Dika
console.log(data.hobi[0]); // Output: coding

Array of Objects: Kombinasi Powerful

const mahasiswa = [
  { nama: "Dika", nilai: [85, 90, 88] },
  { nama: "Budi", nilai: [78, 82, 95] },
  { nama: "Ani",  nilai: [92, 88, 91] }
];

// Hitung rata-rata setiap mahasiswa
const denganRataRata = mahasiswa.map(m => ({
  ...m,
  rataRata: m.nilai.reduce((a, b) => a + b, 0) / m.nilai.length
}));

console.log(denganRataRata);
// Output:
// [
//   { nama: "Dika", nilai: [85, 90, 88], rataRata: 87.67 },
//   { nama: "Budi", nilai: [78, 82, 95], rataRata: 85 },
//   { nama: "Ani",  nilai: [92, 88, 91], rataRata: 90.33 }
// ]

// Filter mahasiswa dengan rata-rata di atas 87
const terbaik = denganRataRata.filter(m => m.rataRata > 87);
console.log(terbaik.map(m => m.nama));  // Output: ["Dika", "Ani"]

Recap

Konsep Penjelasan
Array Kumpulan data berurutan, diakses dengan index
Array Methods push, pop, map, filter, reduce, forEach, some, every
Object Struktur data key-value
Dot vs Bracket Notation Akses property: dot untuk static, bracket untuk dinamis
Object Iteration Object.keys(), Object.values(), Object.entries(), for…in
Array Destructuring Unpacking array ke variabel: const [a, b] = arr
Object Destructuring Unpacking object ke variabel: const { a, b } = obj
Spread Operator Menyebar array/object: ...
JSON.stringify() Konversi object ke JSON string
JSON.parse() Konversi JSON string ke object

Penutup

Arrays dan objects adalah dua pilar data management dalam JavaScript. Dengan memahami cara membuat, memanipulasi, dan menggabungkan keduanya, Anda akan mampu bekerja dengan data kompleks dalam skenario nyata — dari mengelola data API hingga membangun aplikasi full-stack.

Di artikel selanjutnya, kita akan membahas DOM Manipulation — cara JavaScript berinteraksi dengan elemen-elemen di halaman web.

Selamat belajar! 🚀

Mail Facebook Twitter Whatsapp