Urutin Data dengan Mudah Pakai Array.sort() di JavaScript

Urutin Data dengan Mudah Pakai Array.sort() di JavaScript
Photo by Alex Block / Unsplash

Mengurutkan data di JavaScript gak perlu ribet! Kalau kamu sering kerja dengan array, pasti ada saatnya butuh ngurutkan data—entah itu angka, string, atau objek. Nah, di sinilah sort() jadi penyelamat.

Fungsi sort() memungkinkan kita mengurutkan elemen dalam array secara mudah, baik ascending (A-Z, 0-9) maupun descending (Z-A, 9-0).

Yuk, kita bahas gimana cara pakainya dengan contoh biar makin paham!

Cara Kerja sort()

Secara default, sort() mengubah elemen array menjadi string dan mengurutkannya berdasarkan urutan alfabet. Ini mungkin bermasalah untuk angka, tapi jangan khawatir, kita bisa atasi dengan callback function.

Sintaks Dasar

array.sort([compareFunction]);
  • Tanpa compareFunction → Mengurutkan berdasarkan alfabet.
  • Dengan compareFunction → Mengurutkan berdasarkan logika yang kita tentukan.

Contoh sort() Tanpa Callback

1. Mengurutkan Array String

let nama = ["Zara", "Andi", "Budi", "Citra"];

nama.sort();

console.log(nama);

Output:

["Andi", "Budi", "Citra", "Zara"]

sort() bekerja sempurna untuk string karena secara default mengurutkan alfabet.

2. Mengurutkan Array Angka (TAPI ERROR!)

let angka = [100, 25, 10, 5, 1];

angka.sort();

console.log(angka);

Output:

[1, 10, 100, 25, 5]

Salah! Kenapa? Karena sort() mengonversi angka menjadi string sebelum mengurutkan. Akibatnya, "100" dianggap lebih kecil dari "25" karena dilihat dari karakter pertama.

Solusinya? Pakai compare function!

Menggunakan compareFunction untuk Angka

Mengurutkan Angka dengan Benar

let angka = [100, 25, 10, 5, 1];

// Urutkan dari kecil ke besar
angka.sort((a, b) => a - b);

console.log(angka);

Output:

[1, 5, 10, 25, 100]

Cara Kerja a - b dalam sort()

  • Jika a - b hasilnya negatif (a < b), maka a ditempatkan lebih dulu.
  • Jika a - b hasilnya positif (a > b), maka b ditempatkan lebih dulu.
  • Jika a - b hasilnya 0, maka urutan tetap.

Mengurutkan dari Besar ke Kecil

let angka = [100, 25, 10, 5, 1];

// Urutkan dari besar ke kecil
angka.sort((a, b) => b - a);

console.log(angka);

Output:

[100, 25, 10, 5, 1]

Mengurutkan Array Objek

Misalkan kita punya daftar produk dengan nama dan harga, dan kita ingin mengurutkannya berdasarkan harga.

let produk = [
  { nama: "Mouse", harga: 50000 },
  { nama: "Keyboard", harga: 150000 },
  { nama: "Monitor", harga: 2000000 }
];

// Urutkan dari harga termurah ke termahal
produk.sort((a, b) => a.harga - b.harga);

console.log(produk);

Output:

[
  { "nama": "Mouse", "harga": 50000 },
  { "nama": "Keyboard", "harga": 150000 },
  { "nama": "Monitor", "harga": 2000000 }
]

Kalau mau urutkan dari yang paling mahal, tinggal balik:

produk.sort((a, b) => b.harga - a.harga);

Mengurutkan dengan Huruf Besar dan Kecil (Case Insensitive)

Kadang ada data string campur huruf besar dan kecil yang bisa bikin pengurutan tidak sesuai harapan.

Contoh masalahnya:

let nama = ["Zara", "andi", "Budi", "citra"];

nama.sort();

console.log(nama);

Output:

["Budi", "Zara", "andi", "citra"]

Kenapa "andi" dan "citra" di urutan akhir? Karena huruf kecil lebih besar daripada huruf besar dalam Unicode.

Solusi:

nama.sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase()));

console.log(nama);

Output:

["andi", "Budi", "citra", "Zara"]

Sekarang urutannya benar!

Kesimpulan

Metode Fungsi
sort() Mengurutkan array berdasarkan alfabet (default)
sort((a, b) => a - b) Mengurutkan angka dari kecil ke besar
sort((a, b) => b - a) Mengurutkan angka dari besar ke kecil
sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())) Mengurutkan string tanpa peduli huruf besar/kecil
sort((a, b) => a.harga - b.harga) Mengurutkan array objek berdasarkan harga

Jadi, kalau butuh mengurutkan data di array, pakai sort() dengan compare function yang sesuai biar hasilnya benar!