- 1 1. Pendahuluan
- 2 2. Memahami Fitur Pengurutan Native JavaScript
- 3 3. Contoh Implementasi: Mengurutkan Tabel HTML
- 4 4. Pengurutan Seret-dan-Jatuhkan dengan SortableJS
- 5 5. Tabel Perbandingan: Perpustakaan Pihak Ketiga vs Implementasi Native
- 6 6. Tips Implementasi dan Pemecahan Masalah
- 7 7. Pertanyaan yang Sering Diajukan (FAQ)
- 7.1 Q1: Mengapa fitur penyortiran tabel tidak berfungsi?
- 7.2 Q2: Drag-and-drop tidak merespons. Apa yang harus saya lakukan?
- 7.3 Q3: Bagaimana cara menyimpan urutan yang disortir ke server?
- 7.4 Q4: Bagaimana saya dapat meningkatkan kinerja?
- 7.5 Q5: Dapatkah penyortiran digabungkan dengan fitur tambahan?
- 8 8. Kesimpulan
1. Pendahuluan
Fungsi pengurutan berbasis JavaScript sangat berguna untuk mengelola data secara dinamis dalam tabel dan daftar.
Dalam artikel ini, kami menjelaskan secara komprehensif segala hal mulai dari fitur pengurutan native JavaScript hingga implementasi pengurutan drag-and-drop yang intuitif.
Dengan membaca artikel ini, Anda akan dapat:
- Memahami cara mengurutkan array menggunakan fitur standar JavaScript.
- Menerapkan fungsi pengurutan untuk tabel HTML dan daftar.
- Menerapkan pengurutan drag-and-drop menggunakan SortableJS.
- Mendapatkan keterampilan praktis yang dapat diterapkan pada proyek dunia nyata melalui contoh dan kasus penggunaan.
Kami akan membahas setiap topik langkah demi langkah, jadi pastikan untuk mengikuti dan mencoba mengimplementasikan contoh-contohnya sendiri.
2. Memahami Fitur Pengurutan Native JavaScript
2.1 Metode Pengurutan Dasar
Di JavaScript, Anda dapat dengan mudah mengurutkan data array menggunakan fungsi pengurutan bawaan.
Bagian ini menjelaskan segala hal mulai dari penggunaan dasar hingga contoh lanjutan, lengkap dengan contoh kode.
Contoh Pengurutan String
const fruits = ["banana", "apple", "orange", "grape"];
fruits.sort();
console.log(fruits);
// Output: ["apple", "banana", "grape", "orange"]
Contoh Pengurutan Numerik
const numbers = [40, 100, 1, 5, 25, 10];
numbers.sort((a, b) => a - b); // Ascending order
console.log(numbers);
// Output: [1, 5, 10, 25, 40, 100]
Saat mengurutkan angka, penting untuk menggunakan fungsi perbandingan.
Tanpa fungsi tersebut, nilai akan diurutkan secara leksikografis (sebagai string), yang dapat menghasilkan hasil yang tidak terduga.
2.2 Contoh Lanjutan Menggunakan Fungsi Perbandingan Kustom
Saat mengurutkan array objek, Anda dapat mengurutkan berdasarkan properti tertentu.
Contoh Pengurutan Array Objek
const users = [
{ name: "Yamada", age: 30 },
{ name: "Tanaka", age: 25 },
{ name: "Suzuki", age: 35 }
];
// Sort by age
users.sort((a, b) => a.age - b.age);
console.log(users);
/* Output:
[
{ name: "Tanaka", age: 25 },
{ name: "Yamada", age: 30 },
{ name: "Suzuki", age: 35 }
]
*/
Seperti yang ditunjukkan di atas, menggunakan fungsi perbandingan memungkinkan Anda menerapkan logika pengurutan yang sangat disesuaikan.
2.3 Tips Optimasi Kinerja
Saat bekerja dengan dataset besar, pertimbangkan poin-poin berikut:
- Optimalkan fungsi perbandingan
- Hindari perhitungan berat di dalam fungsi perbandingan.
- Kurangi jumlah data yang diurutkan
- Saring data yang tidak diperlukan sebelum melakukan pengurutan.
- Gunakan Web Workers
- Jalankan operasi pengurutan di latar belakang untuk meningkatkan kinerja secara keseluruhan.

3. Contoh Implementasi: Mengurutkan Tabel HTML
3.1 Fungsi Pengurutan Tabel Dasar
Di sini, kami akan mengimplementasikan fitur dalam JavaScript yang mengurutkan data tabel HTML dengan mengklik header kolom.
Kode HTML
<table id="data-table">
<thead>
<tr>
<th onclick="sortTable(0)">Name</th>
<th onclick="sortTable(1)">Age</th>
</tr>
</thead>
<tbody>
<tr><td>Yamada</td><td>30</td></tr>
<tr><td>Tanaka</td><td>25</td></tr>
<tr><td>Suzuki</td><td>35</td></tr>
</tbody>
</table>
Kode JavaScript
function sortTable(columnIndex) {
const table = document.getElementById("data-table");
const rows = Array.from(table.rows).slice(1); // Exclude the header row
rows.sort((rowA, rowB) => {
const cellA = rowA.cells[columnIndex].innerText;
const cellB = rowB.cells[columnIndex].innerText;
// Detect whether values are numeric or strings, then sort accordingly
return isNaN(cellA) || isNaN(cellB)
? cellA.localeCompare(cellB)
: cellA - cellB;
});
// Re-render after sorting
rows.forEach(row => table.tBodies[0].appendChild(row));
}
Ini adalah implementasi sederhana yang memungkinkan Anda mengurutkan setiap kolom hanya dengan mengklik.
3.2 Contoh Lanjutan yang Digabungkan dengan Penyaringan
Dengan menggabungkan pengurutan dengan penyaringan, Anda juga dapat mengurutkan hasil pencarian secara real time.
Contoh Kode JavaScript
document.getElementById("filter-input").addEventListener("input", (e) => {
const filter = e.target.value.toLowerCase();
const rows = document.querySelectorAll("#data-table tbody tr");
rows.forEach(row => {
const text = row.innerText.toLowerCase();
row.style.display = text.includes(filter) ? "" : "none";
});
});
Ini memungkinkan fitur di mana pengguna dapat mencari dan mengurutkan data secara bersamaan.
4. Pengurutan Seret-dan-Jatuhkan dengan SortableJS
4.1 Apa Itu SortableJS?
SortableJS adalah perpustakaan JavaScript yang memudahkan penerapan pengurutan seret-dan-jatuhkan untuk elemen HTML.
Perpustakaan ini memiliki fitur-fitur berikut:
- Interaksi seret-dan-jatuhkan yang intuitif .
- Sangat dapat disesuaikan, dan dapat diterapkan pada daftar serta tabel.
- Ramah seluler, mendukung operasi berbasis sentuhan.
- Ringan tanpa ketergantungan, memberikan kinerja yang luar biasa.
4.2 Instalasi dan Penyiapan Dasar untuk SortableJS
4.2.1 Langkah-Langkah Instalasi
Menggunakan CDN
<script src="https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.14.0/Sortable.min.js"></script>
Menggunakan npm (untuk lingkungan Node.js)
npm install sortablejs
4.2.2 Konfigurasi Dasar
Dengan menggunakan kode HTML dan JavaScript berikut, Anda dapat menerapkan pengurutan seret-dan-jatuhkan.
Kode HTML
<ul id="sortable-list">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
Kode JavaScript
document.addEventListener("DOMContentLoaded", () => {
const list = document.getElementById("sortable-list");
new Sortable(list, {
animation: 150, // Animation speed (milliseconds)
ghostClass: "sortable-ghost" // Class applied to the element while dragging
});
});
CSS (Opsional)
.sortable-ghost {
opacity: 0.5;
background: #f0f0f0;
}
4.3 Contoh Lanjutan: Seret-dan-Jatuhkan Antara Beberapa Daftar
Kode HTML
<div>
<ul id="list1">
<li>Item A</li>
<li>Item B</li>
</ul>
<ul id="list2">
<li>Item C</li>
<li>Item D</li>
</ul>
</div>
Kode JavaScript
document.addEventListener("DOMContentLoaded", () => {
const list1 = document.getElementById("list1");
const list2 = document.getElementById("list2");
new Sortable(list1, {
group: "shared", // Set the group name
animation: 150
});
new Sortable(list2, {
group: "shared", // Use the same group name
animation: 150
});
});

5. Tabel Perbandingan: Perpustakaan Pihak Ketiga vs Implementasi Native
5.1 Tabel Perbandingan
| Feature / Characteristic | Native Implementation | SortableJS |
|---|---|---|
| Code simplicity | Short and simple (basic sorting only) | Slightly more complex (supports advanced features) |
| Drag & drop support | ✕ Not supported | ◯ Fully supported (including multi-list movement) |
| Performance | ◯ Fast (uses native functions) | ◯ Fast (optimized internally) |
| Customizability | △ Limited via comparison functions | ◯ Highly flexible with advanced options |
| Mobile support | ✕ Requires manual touch support | ◯ Mobile-friendly by default |
| Dependencies | ✕ None | ◯ Required (external library) |
| Implementation difficulty | ◯ Beginner-friendly | △ Slightly challenging for beginners |
| Advanced use cases (server sync, etc.) | △ Requires custom implementation | ◯ Easy with rich examples |
| Learning cost | ◯ Basic JavaScript knowledge is sufficient | △ Requires reading documentation |
5.2 Kapan Implementasi Native Menjadi Pilihan Terbaik
Keuntungan
- Tanpa ketergantungan, sehingga tidak memerlukan perpustakaan eksternal.
- Cepat diimplementasikan dengan kode singkat, ideal untuk fitur pengurutan sederhana .
- Kinerja tinggi, cocok bahkan untuk dataset yang besar.
Kerugian
- Tidak mendukung seret-dan-jatuhkan, memerlukan pekerjaan tambahan untuk interaksi visual.
- Kustomisasi lanjutan atau dukungan multi-daftar memerlukan implementasi atau perpustakaan tambahan .
Kasus Penggunaan
- Ketika Anda perlu mengurutkan tabel HTML statis atau array .
- Proyek yang mengutamakan kinerja dan fungsionalitas minimal.
5.3 Kapan SortableJS Menjadi Pilihan Terbaik
Keuntungan
- Seret-dan-jatuhkan bawaan untuk interaksi visual yang intuitif.
- Mendukung pergerakan multi-daftar dan sinkronisasi server .
- Siap seluler secara default, termasuk dukungan sentuhan.
- Sangat dapat disesuaikan dan cocok untuk lingkungan produksi.
Kerugian
- Memerlukan penambahan perpustakaan, sedikit menambah ukuran proyek.
- Kompleksitas kode dapat meningkat, menghasilkan biaya belajar yang lebih tinggi .
- Potensi masalah ketergantungan atau konfigurasi di lingkungan tertentu.
Kasus Penggunaan
- Ketika Anda memerlukan daftar dinamis atau fungsi seret-dan-jatuhkan .
- Desain UI yang memerlukan memindahkan item antara beberapa daftar atau menyimpan urutan secara real time .
6. Tips Implementasi dan Pemecahan Masalah
6.1 Optimisasi Kinerja
1. Menangani Set Data Besar
Menyortir dataset besar dapat menyebabkan penurunan kinerja.
Solusi
- Gunakan scrolling virtual
const visibleItems = items.slice(startIndex, endIndex); renderItems(visibleItems);
- Manfaatkan pemrosesan asynchronous Jalankan logika penyortiran di Web Workers untuk menjaga UI tetap responsif.
2. Minimalkan Operasi DOM
Penyortiran sering melibatkan manipulasi DOM yang sering, sehingga mengurangi reflow yang tidak perlu sangat penting.
Solusi
- Gunakan DocumentFragment
const fragment = document.createDocumentFragment(); rows.forEach(row => fragment.appendChild(row)); table.appendChild(fragment);
6.2 Meningkatkan Aksesibilitas dan Kegunaan
1. Dukungan Navigasi Keyboard
Sediakan alternatif keyboard bagi pengguna yang tidak dapat menggunakan drag-and-drop.
Solusi
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowUp') {
moveItemUp();
} else if (e.key === 'ArrowDown') {
moveItemDown();
}
});
2. Peningkatan Umpan Balik Visual
Tambahkan petunjuk visual untuk secara jelas menunjukkan aksi penyortiran.
Contoh CSS
.sortable-ghost {
opacity: 0.5;
border: 2px dashed #007BFF;
}
6.3 Panduan Penanganan Kesalahan dan Debugging
1. Kesalahan: Penyortiran Tidak Berfungsi
Penyebab 1: Selector tidak tepat
const list = document.getElementById("sortable-list");
if (!list) {
console.error("Element not found. Please check the ID.");
}
Penyebab 2: Konflik event
list.removeEventListener('click', handler);
6.4 Daftar Periksa Pemecahan Masalah
- Periksa kesalahan JavaScript di konsol
- Gunakan tab Console pada developer tools untuk mengidentifikasi masalah.
- Verifikasi format data
- Validasi struktur data yang digunakan dalam penyortiran dan komunikasi server.
- Konfirmasi versi perpustakaan
- Pastikan semua perpustakaan dan dependensi terbaru.

7. Pertanyaan yang Sering Diajukan (FAQ)
Q1: Mengapa fitur penyortiran tabel tidak berfungsi?
A1: Silakan periksa poin-poin berikut.
- Selector tidak tepat
const table = document.getElementById("data-table");
- Membedakan antara angka dan string
rows.sort((a, b) => Number(a) - Number(b));
- Konflik event Kode JavaScript atau plugin lain mungkin menempelkan event pada elemen yang sama.
Q2: Drag-and-drop tidak merespons. Apa yang harus saya lakukan?
A2: Periksa item-item berikut.
- Pastikan SortableJS sudah dimuat
console.log(Sortable);
- Verifikasi struktur HTML
<ul id="sortable-list"> <li>Item 1</li> </ul>
- Periksa pengaturan dukungan seluler
new Sortable(list, { touchStartThreshold: 5 });
- Konfigurasi grup tidak tepat
group: "shared"
Q3: Bagaimana cara menyimpan urutan yang disortir ke server?
A3: Sinkronisasi server dapat dengan mudah diimplementasikan menggunakan AJAX.
Contoh JavaScript
const list = document.getElementById("sortable-list");
new Sortable(list, {
animation: 150,
onEnd: function () {
const items = Array.from(list.children).map(item => item.innerText);
fetch("/save-order", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ order: items })
})
.then(response => response.json())
.then(data => console.log("Saved successfully:", data))
.catch(error => console.error("Error:", error));
}
});
Q4: Bagaimana saya dapat meningkatkan kinerja?
A4: Pertimbangkan pendekatan berikut.
- Gunakan scrolling virtual
const visibleItems = items.slice(startIndex, endIndex); renderItems(visibleItems);
- Gunakan Web Workers Proses data di latar belakang untuk meningkatkan responsivitas UI.
- Optimalkan logika penyortiran
rows.sort((a, b) => a - b);
Q5: Dapatkah penyortiran digabungkan dengan fitur tambahan?
A5: Ya, dapat dengan mudah diperluas seperti ditunjukkan di bawah ini.
- Gabungkan dengan penyaringan waktu nyata
document.getElementById("search").addEventListener("input", (e) => { const value = e.target.value.toLowerCase(); document.querySelectorAll("#sortable-list li").forEach(item => { item.style.display = item.innerText.toLowerCase().includes(value) ? "" : "none"; }); });
- Tambah dan hapus item secara dinamis
function addItem(text) { const list = document.getElementById("sortable-list"); const li = document.createElement("li"); li.textContent = text; list.appendChild(li); } function removeItem(index) { const list = document.getElementById("sortable-list"); list.removeChild(list.children[index]); }
8. Kesimpulan
8.1 Ringkasan Artikel
1. Penyortiran Native JavaScript
- Mempelajari teknik penyortiran dasar menggunakan
Array.prototype.sort(). - Membahas penyortiran array objek dengan fungsi perbandingan dan strategi optimasi kinerja.
2. Penyortiran Tabel HTML
- Memperkenalkan contoh praktis untuk menyortir data tabel per kolom.
- Menjelajahi kasus penggunaan lanjutan yang digabungkan dengan fungsi penyaringan.
3. Drag-and-Drop dengan SortableJS
- Mengimplementasikan penyortiran drag-and-drop yang intuitif menggunakan SortableJS.
- Mempelajari pendekatan fleksibel termasuk pergerakan multi‑daftar dan sinkronisasi server.
4. Perbandingan Native vs SortableJS
- Membandingkan kelebihan dan kasus penggunaan untuk membantu memilih pendekatan terbaik bagi setiap proyek.
5. Pemecahan Masalah dan FAQ
- Menyediakan solusi untuk masalah umum dan tips untuk meningkatkan kinerja serta keandalan.
8.2 Langkah Praktis Selanjutnya
Fungsi penyortiran adalah komponen kunci untuk meningkatkan UI dinamis dan manajemen data.
Ingat poin-poin berikut saat Anda melanjutkan.
- Mulailah dengan implementasi sederhana, kemudian jelajahi kasus penggunaan lanjutan
- Bereksperimen dengan menyesuaikan kode
- Kuasi teknik penanganan error dan debugging
- Terus‑menerus meningkatkan kinerja dan kegunaan
8.3 Ambil Tindakan
1. Cobalah mengimplementasikannya sendiri!
- Terapkan contoh kode dari artikel ini ke proyek Anda sendiri dan uji secara praktik.
- Membagikan kode sumber Anda di GitHub dan bertukar masukan dengan pengembang lain juga disarankan.
2. Terus tingkatkan keterampilan Anda!
- Jika Anda ingin mempelajari lebih lanjut tentang fitur penyortiran, lihat sumber resmi berikut:
- SortableJS Official Documentation
- MDN Web Docs – Array.sort()
3. Periksa artikel terkait
- Kami juga merekomendasikan artikel tentang “Implementasi Penyaringan JavaScript” dan “Dasar‑dasar Manipulasi DOM” .
8.4 Pemikiran Akhir
Fungsi penyortiran penting untuk mengatur data dan meningkatkan pengalaman pengguna.
Gunakan teknik yang diperkenalkan dalam artikel ini untuk meningkatkan proyek Anda.
Jika Anda memiliki pertanyaan tentang mengimplementasikan fitur baru atau memperluas contoh ini,
jangan ragu menghubungi melalui bagian komentar atau formulir kontak.
Langkah selanjutnya ada di tangan Anda—mulailah bereksperimen dengan kode hari ini!



