# Hari 5: Array

### Array

Array dapat menyimpan banyak data dengan tipe data yang berbeda-beda. Setiap nilai dalam array memiliki indeks dan memiliki referensi di alamat memori. Nilai dapat diakses dengan indeks yang dimulai dari indeks ke NOL ( 0 ). Elemen terakhir adalah panjang indeks dikurang 1.

Array ditandai dengan kurung siku `[]`

```jsx
let peliharaan = [];
let makanan = ["pisang", "susu", "indomie"];

console.log(makanan[2]);
// hasil: indomie
```

![https://raw.githubusercontent.com/AsrulLove/img-db/master/indeks.png](https://raw.githubusercontent.com/AsrulLove/img-db/master/indeks.png)

### Ubah nilai Array

Untuk mengubah nilai array bisa menggunakan indeks kemudian beri nilai layaknya memberi nilai pada variable.

```jsx
let makanan = ["pisang", "susu", "indomie"];

console.log(makanan[2]);
// hasil: indomie
makanan[2] = "Nasi";
console.log(makanan[2]);
// hasil: Nasi
```

### Method .concat()

Untuk menggabung dua array atau lebih bisa menggunakan concat.

```jsx
let buah = ["pisang", "jeruk", "mangga", "lemon"];
let sayuran = ["Tomat", "Kentang", "Kubis", "Bawang", "Wortel"];
let isiKulkas = buah.concat(sayuran);

console.log(isiKulkas);
// hasil: ['pisang', 'jeruk', 'mangga', 'lemon', 'Tomat', 'Kentang', 'Kubis', 'Bawang', 'Wortel']
```

selain pakai `.concat()` bisa juga menggunakan array spread (ES6).

```jsx
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = [...arr1, ...arr2];
console.log(arr3);
// hasil: [1,2,3,4,5,6]
```

### Method .length

Untuk mendapatkan panjang array bisa menggunakan array.length.

```jsx
let siswa = ["Anis", "Asrul", "Tisha"];
console.log(siswa.length);
// hasil: 3
```

### Method .indexOf()

Method .indexOf, digunakan untuk memeriksa apakah ada item dalam array. Jika ada, ia mengembalikan indeks item tersebut, jika tidak ada maka mengembalikan `-1`.

```jsx
let isiKulkas = ["semangka", "pisang", "mangga", "apel"];
let index = isiKulkas.indexOf("semangka");
console.log(index);
// hasil: 0

if (index != -1) {
  console.log("Buah tersebut ada dalam kulkas, silahkan ambil");
} else {
  console.log("Buah itu belum tersedia dalam kulkas");
}

// hasil: Buah tersebut ada dalam kulkas, silahkan ambil
```

### Method .join()

Method .join() digunakan pada array untuk menggabungkan item-item dan menjadikannya sebagai sting. Untuk jelasnya perhatikan contoh berikut.

```jsx
let mugiwara = ["Luffy", "Zorro", "Sanji", "Nami"];

console.log(mugiwara.join());
// hasil: Luffy,Zorro,Sanji,Nami

console.log(mugiwara.join(" atau "));
// hasil: Luffy atau Zorro atau Sanji atau Nami

console.log(mugiwara.join("**"));
// hasil: Luffy**Zorro**Sanji**Nami

console.log(mugiwara.join(", "));
// hasil: Luffy, Zorro, Sanji, Nami

console.log(mugiwara.join("-"));
// hasil: Luffy-Zorro-Sanji-Nami
```

Kalau dilihat lebih teliti lagi, parameter `.join()` adalah penghubung yang digunakan setelah array itu digabung.

### Method .push()

Push adalah fungsi array yang akan menambahkan nilai di belakang nilai terakhir pada array. Layaknya sebuah antrian, push adalah orang yang mengantri selanjutnya, akan berada di posisi paling belakang. Fungsi push akan menerima satu parameter, berupa nilai yang akan ditambahkan.

```jsx
let bialngan = [0, 1, 2, 3];
bialngan.push(4);
console.log(bialngan);
// hasil: [0, 1, 2, 3, 4]
```

### Method .pop()

Fungsi array yang akan menghapus nilai paling belakang dari array.

```jsx
let bilangan = [0, 1, 2, 3];
bilangan.pop();
console.log(bilangan);
// hasil: [0, 1, 2]
```

### Method .unshift()

Unshift adalah fungsi array yang akan menambah nilai ke depan array (ke index 0), dan menggeser seluruh isi array kebelakang.

```jsx
let bilangan = [0, 1, 2];
bilangan.unshift(3);
console.log(bilangan);
// hasil: [3, 0, 1, 2]
```

### Method .shift()

Shift adalah fungsi array yang akan menghapus nilai paling depan dari array. Fungsi shift tidak menerima parameter apapun.

```jsx
let bilangan = [3, 0, 1, 2];
bilangan.shift();
console.log(bilangan);
// hasil: [0, 1, 2]
```

### Method .sort()

sesuai nama sort adalah untuk mengurutkan. Sort mengurutkan otomatis secara ascending dan diurutkan berdasarkan **unicode** dari karakter. Kamu akan menemukan masalah ini saat mengurutkan angka.

Contoh sort array dalam bentuk angka

```jsx
let bilangan = [3, 5, 7, 1, 2];
bilangan.sort();
console.log(bilangan);
// hasil: [1, 2, 3, 5, 7]

```

Contoh sort array dalam bentuk huruf atau text

```jsx
let siswa = ["Sani", "Anis", "Kiki", "Fahri"];
siswa.sort();
console.log(siswa);
// hasil: ['Anis', 'Fahri', 'Kiki', 'Sani']

```

Contoh kasus `.sort()` pada angka akan bermsalah jika angka lebih dari 1 digit:

```jsx
let bilangan = [1, 2, 15];
bilangan.sort();
console.log(bilangan);
// hasil: [1, 15, 2]
```

Hasil dari sort di atas tidak sesuai dengan `ekspektasi` kita! Seharusnya [1, 2, 15] namun yang terjadi adalah [1, 15, 2]. Hal ini karena JavaScript melakukan sort secara **unicode** atau sebagai karakter, dan karena 15 diawali dengan karakter '1', maka akan dianggap lebih awal daripada karakter '2'. Untuk menyelesaikan masalah ini, kamu perlu menambahkan satu parameter berupa fungsi pembanding. Mungkin kamu akan sedikit bingung dengan code dibawah ini, namun intinya adalah kita membuat satu fungsi yang menilai apakah nilai pertama lebih kecil dari nilai kedua.

```jsx
let bilangan = [1, 2, 15];
bilangan.sort(function (value1, value2) {
  return value1 > value2;
});
console.log(bilangan);
// hasil: [1, 2, 15]
```

Jika menggunakan function dalam sort maka kita juga bisa membuat fungsi sort dalam bentuk descending, perhatikan contoh berikut.

```jsx
let bilangan = [1, 2, 15];
bilangan.sort(function (value1, value2) {
  return value1 < value2;
});
console.log(bilangan);
// hasil: [15, 2, 1]
```

### Method .slice()

Slice adalah fungsi array yang akan mengambil irisan atau potongan dari sebuah array. `.slice()` menerima satu atau dua parameter. Parameter pertama adalah index irisan diambil, dan parameter kedua adalah index irisan terakhir diambil. Jika parameter kedua tidak didefinisikan, irisan akan diambil hingga akhir dari array.

```jsx
let bilangan = [0, 1, 2, 3, 4];
let porongan = bilangan.slice(1, 3);
console.log(porongan);
// hasil: [1, 2]

let potonganLain = arr.slice(1);
console.log(potonganLain);
// hasil: [1, 2, 3, 4]
```

Ada banyak lagi method yang disediakan javascript untuk array seperti .map(), .reduce(), .filter(), dan lainnya.

Kamu bisa baca tulisan saya ini [https://asrul.dev/penggunaan-map-filter-dan-reduce-javascript](https://asrul.dev/penggunaan-map-filter-dan-reduce-javascript)

### Array Multi-dimensi

Array multidimensi adalah sebuah array yang berisikan array lagi didalamnya. Konsepnya penggunaannya sama dengan array biasa (satu dimensi), hanya saja jumlah indeks yang digunakan saat mengakses nilai didalam array adalah sebanyak dimensi dari array tersebut.

Contoh array multidimensi antara lain diagram kartesius dan matriks. Diagram kartesius dan matriks adalah array multidimensi yang sama-sama membutuhkan koordinat untuk mengakses nilai didalamnya.

```jsx
let matriks = [
  [1, 2],
  [3, 4],
  [5, 6],
];
console.log(matriks[0]);
// hasil: [1, 2]

console.log(matriks[0][1]);
// hasil: 2

let siswa = [
  ["Asrul Harahap", "Universitas Negeri Padang"],
  ["Anis Fikriyyah", "Universitas Bale Bandung"],
];

console.log(siswa[1]);
// hasil: ['Anis Fikriyyah', 'Universitas Bale Bandung']

console.log(siswa[0][1]);
// hasil: 'Universitas Negeri Padang'
```
