mooc-course.com is learner-supported. When you buy through links on our site, we may earn an affiliate commission.

How to sort rows in a table using JavaScript ?

Ever found yourself staring at a cluttered table on a webpage, wishing you could reorganize it with a simple click? You’re not alone. Sorting table rows is a crucial feature for any data-heavy web application, enhancing user experience and data comprehension. In this article, we’ll explore five different methods to implement table sorting using JavaScript, from basic to advanced techniques. Whether you’re a budding developer or a seasoned coder, these strategies will empower you to create more interactive and user-friendly tables.

How to sort rows in a table using JavaScript?

Learning how to sort table rows with JavaScript is essential for:

  • Improving data readability and analysis
  • Enhancing user interaction and satisfaction
  • Demonstrating your prowess in DOM manipulation and array handling

Let’s dive into the methods, starting with a simple HTML table structure:

<table id="myTable">
  <thead>
    <tr>
      <th>Name</th>
      <th>Age</th>
      <th>City</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>John</td>
      <td>30</td>
      <td>New York</td>
    </tr>
    <tr>
      <td>Alice</td>
      <td>25</td>
      <td>London</td>
    </tr>
    <tr>
      <td>Bob</td>
      <td>35</td>
      <td>Paris</td>
    </tr>
  </tbody>
</table>

Read more: How to sort rows in a table using JavaScript?

Method 1: Basic JavaScript Sort

This method uses JavaScript’s built-in sort function to reorder table rows.

function sortTable(columnIndex) {
  const table = document.getElementById("myTable");
  const tbody = table.querySelector("tbody");
  const rows = Array.from(tbody.querySelectorAll("tr"));

  rows.sort((a, b) => {
    const aValue = a.cells[columnIndex].textContent;
    const bValue = b.cells[columnIndex].textContent;
    return aValue.localeCompare(bValue);
  });

  rows.forEach(row => tbody.appendChild(row));
}

// Usage
document.querySelector("th").addEventListener("click", () => sortTable(0));

Pros:

  • Simple implementation
  • Works well for basic sorting needs

Cons:

  • Limited to string comparisons by default
  • Doesn’t handle complex data types easily

Method 2: Numeric and String Sorting

This method distinguishes between numeric and string values for more accurate sorting.

function sortTable(columnIndex) {
  const table = document.getElementById("myTable");
  const tbody = table.querySelector("tbody");
  const rows = Array.from(tbody.querySelectorAll("tr"));

  rows.sort((a, b) => {
    const aValue = a.cells[columnIndex].textContent;
    const bValue = b.cells[columnIndex].textContent;
    
    if (!isNaN(aValue) && !isNaN(bValue)) {
      return Number(aValue) - Number(bValue);
    } else {
      return aValue.localeCompare(bValue);
    }
  });

  rows.forEach(row => tbody.appendChild(row));
}

Pros:

  • Handles both numeric and string data
  • More accurate sorting for mixed data types

Cons:

  • Still limited to simple data types

Method 3: Using a Library (DataTables)

For more complex tables, using a library like DataTables can be beneficial.

<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.24/css/jquery.dataTables.css">
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.24/js/jquery.dataTables.js"></script>
$(document).ready(function() {
  $('#myTable').DataTable();
});

Pros:

  • Feature-rich with minimal code
  • Handles complex sorting scenarios

Cons:

  • Adds external dependencies
  • May be overkill for simple tables

Method 4: Custom Sorting Function

This method allows for highly customized sorting logic.

function sortTable(columnIndex, customSort) {
  const table = document.getElementById("myTable");
  const tbody = table.querySelector("tbody");
  const rows = Array.from(tbody.querySelectorAll("tr"));

  rows.sort((a, b) => {
    const aValue = a.cells[columnIndex].textContent;
    const bValue = b.cells[columnIndex].textContent;
    return customSort(aValue, bValue);
  });

  rows.forEach(row => tbody.appendChild(row));
}

// Usage
function customDateSort(a, b) {
  return new Date(a) - new Date(b);
}

document.querySelector("th").addEventListener("click", () => sortTable(0, customDateSort));

Pros:

  • Highly flexible for complex data types
  • Allows for specific business logic in sorting

Cons:

  • Requires more code for each custom sort function
  • Can become complex for multiple columns

Method 5: Sorting with CSS Grid

function sortTable(columnIndex) {
  const table = document.getElementById("myTable");
  const tbody = table.querySelector("tbody");
  const rows = Array.from(tbody.querySelectorAll("tr"));

  rows.sort((a, b) => {
    const aValue = a.cells[columnIndex].textContent;
    const bValue = b.cells[columnIndex].textContent;
    return aValue.localeCompare(bValue);
  });

  tbody.style.display = 'grid';
  rows.forEach((row, index) => {
    row.style.gridRow = index + 1;
  });
}

Pros:

  • Can be more performant for large datasets
  • Allows for smooth animations

Cons:

  • Requires modern browser support
  • May require additional CSS setup

Which Method Should You Use?

The choice depends on your specific needs:

  1. Use the basic JavaScript sort for simple tables with straightforward data.
  2. Opt for the numeric and string sorting method when dealing with mixed data types.
  3. Consider a library like DataTables for complex, feature-rich tables.
  4. Choose custom sorting functions for unique or complex sorting requirements.
  5. Explore CSS Grid-based sorting for modern, performance-focused applications.

For most scenarios, a combination of methods 2 and 4 provides a good balance of flexibility and functionality.

Leave a Reply

Your email address will not be published. Required fields are marked *

Free Worldwide Courses

Learn online for free

Enroll in Multiple Courses

Learn whatever your want from anywhere, anytime

International Language

Courses offered in multiple languages & Subtitles

Verified Certificate

Claim your verified certificate