kembali ke pelajaran

Filter untuk anggota array yang unik

Buatlah sebuah array arr.

Buatlah sebuah fungsi unique(arr) yang harus mengembalikan array dengan item yang unik dari arr.

Contoh:

function unique(arr) {
  /* kodemu */
}

let strings = ["Hare", "Krishna", "Hare", "Krishna",
  "Krishna", "Krishna", "Hare", "Hare", ":-O"
];

alert( unique(strings) ); // Hare, Krishna, :-O

Buka sandbox dengan tes.

Kita lihat seluruh item didalam array:

  • Untuk setiap item kita memeriksa apakah array keluaran sudah memiliki itemnya.
  • Jika sudah maka abaikan, sebaliknya tambahkan kedalam array keluaran.
function unique(arr) {
  let result = [];

  for (let str of arr) {
    if (!result.includes(str)) {
      result.push(str);
    }
  }

  return result;
}

let strings = ["Hare", "Krishna", "Hare", "Krishna",
  "Krishna", "Krishna", "Hare", "Hare", ":-O"
];

alert( unique(strings) ); // Hare, Krishna, :-O

Kodenya bekerja, tapi terdapat sebuah masalah performansi didalamnya.

Metode result.includes(str) secara internal menyusuri arrau result dan membandingkan setiap elemen dengan str untuk menemukan apakah ada yang sama.

Jadi jika didalam result terdapat 100 elemen dan tidak ada yang sama dengan str, lalu itu akan menyusuri seluruh result dan melakukan tepat 100 perbandingan. Dan jika result berukuran sangat besar, seperti 10000, maka akan terjadi 10000 perbandingan.

Itu bukanlah masalah bagi mesinnya, karena mesin Javascript sangatlah cepat, jadi menyusuri 10000 array hanya akan terjadi secara microseconds (micro detik).

Tapi kita melakukan test untuk setiap elemen dari arr, didalam perulangan for.

Jadi jika arr.length adalah 10000 kita akan memiliki sesuatu seperti 10000*10000 = 100 juta perbandingan. Itu sangatlah banyak.

Demikian, solusi ini hanya bagus untuk array dengan ukuran kecil.

Selanjutnya didalam bab Map dan Set kita akan melihat bagaimana cara mengoptimasinya.

Buka solusi dengan tes di sandbox.