Bedah Website #4: Menggabungkan elemen-elemen di list array berdasarkan label tertentu - MZAINI30

Senin, 27 April 2020

Bedah Website #4: Menggabungkan elemen-elemen di list array berdasarkan label tertentu

Misalnya saja kita mempunyai list sebagai berikut:

buah = [
  nama: "Apel"
  banyak: 20
,
  nama: "Apel"
  banyak: 11
,
  nama: "Jeruk"
  banyak: 3
,
  nama: "Jeruk"
  banyak: 10
]

Kan, kalau dari list di atas, boros banget ya. Apel tersebut dua kali. Jeruk juga tersebut dua kali. Pengennya itu ya, digabungin aja. Terus, banyaknya tu dijumlahkan aja.

Hasilnya kan ingin seperti ini:

buah = [
  nama: "Apel"
  banyak: 31
,
  nama: "Jeruk"
  banyak: 13
]

Berikut ini adalah kodenya:

Array::gabung = (label, kuantitas) ->
  label_semua = []
  for x in @
    label_semua.push x[label]
  label_semua = `[...new Set(label_semua)]`
  banyak_semua = []
  for x in label_semua
    banyak_semua.push 0
  for x, n in @
    for y, o in label_semua
      if x[label] is y
        banyak_semua[o] = Number(banyak_semua[o]) + Number(x[kuantitas])
  hasil = []
  for x, n in label_semua
    hasil.push {label: x, kuantitas: banyak_semua[n]}
  hasil = JSON.stringify hasil
  hasil = hasil.replace /label/g, label
  hasil = hasil.replace /kuantitas/g, kuantitas
  hasil = JSON.parse hasil
  hasil

Sedangkan cara memanggilnya adalah seperti ini:

buah.gabung "nama", "banyak"

Pembahasan

Oh iya, mungkin kalian bingung ya ini kode bahasa pemrograman apa. Jadi, ini adalah bahasa pemrograman Coffeescript yang nanti dicompile menjadi Javascript. Sintaksnya sama cuma stylenya aja yang diubah menjadi seperti Python. Jadi, banyak karakter nggak penting yang dibuang.

Nah, sekarang kita bahas kodenya.

Jadi, ini adalah menambahkan prototype gabung ke dalam Array yang memerlukan dua properti yaitu label dan kuantitas (baris 1). Kemudian, di baris 2, kita membuat sebuah array kosong yang bernama  label_semua. Lalu, di baris 3 dan 4, kita memasukkan semua label ke dalam label_semua. Maka, isinya adalah ["Apel", "Apel", "Jeruk", "Jeruk"]. Kemudian, di baris 5, kita kasih Set, yaitu menghapus perulangan. Jadinya, ["Apel", "Jeruk"]. Baris 6, kita buat array kosong dengan nama banyak_semua. Baris 7 dan 8, kita masukkan 0 di banyak_semua dengan length array sepanjang label_semua. Jadinya, [0, 0].

Baris 9-12, kita jumlahkan berdasarkan label. Hasilnya, [31, 13]. Baris 13, kita buat array kosong bernama hasil. Baris 14 dan 15, kita satukan label_semua dan banyak_semua menjadi sebuah kumpulan object. Baris 16-19, ubah label menjadi "nama" dan kuantitas menjadi "banyak". Baris 20, cetak hasilnya.

Mudah aja kan?

Share with your friends

2 komentar

  1. huwaaa, gampang-gampang susah nih hehee tp penjelasannya cukup singkat padat dan jelas, sip mas :)

    BalasHapus
    Balasan
    1. Kalau di tutorial-tutorialku yang paling baru, penjelasannya lebih baik Mbak. Coba mampir deh ke situ.

      Hapus

Maskot Pelarang Adblock

Hallo Kak, Perkenalkan saya Zen. Untuk bisa mengakses situs kami, terlebih dahulu matikan atau non-aktifkan ekstensi AdBlock nya yaaa...

Ok , Saya Mengerti