How to sort rows in a table using JavaScript ?

Since JavaScript doesn’t provide any inbuilt functions to sort a table we will be required to use native methods to sort a given table. We will look into the methods in this article.
Approach: A basic algorithm and a similar approach will be used for both of the following examples. Loop the program to switch and sort the elements until it is sorted.
// Executes on action like button click
Function() {   
       // Main loop that runs until the table is sorted
       While (condition = true) {   
      
          // Runs for all rows
          for (i = 1; i < row.length; i++ ) {   
         
             //Check if the switch is required
             if (element_A > element_B){   
             
                // Perform switch
                PerformSwitch();   
             }
          }
       }
}
Example 1: This example sorts the table using a while loop to switch the rows until the rows are sorted.
HTML
<!DOCTYPE html><html lang="en"><head>    <title>      How to sort rows in a table using JavaScript?      </title>       <style>        body {            text-align: center;        }        table, th, tr td {            border: 1px solid black;        }        th, td {            padding: 3px 20px;        }        table {            margin: auto;        }    </style></head><body>    <h1 style="color:green;">        zambiatek    </h1>         <table id="table">        <tr>            <th>Country</th>            <th>Capital</th>        </tr>        <tr>            <td>United states of America</td>            <td>Washington DC</td>        </tr>        <tr>            <td>India</td>            <td>New Delhi</td>        </tr>        <tr>            <td>Australia</td>            <td>Canberra</td>        </tr>        <tr>            <td>Germany</td>            <td>Berlin</td>        </tr>    </table>    <br>    <button onclick="sortTable()">        Sort    </button>    <script>        // JavaScript Program to illustrate        // Table sort on a button click        function sortTable() {            let table, i, x, y;            table = document.getElementById("table");            let switching = true;            // Run loop until no switching is needed            while (switching) {                switching = false;                let rows = table.rows;                // Loop to go through all rows                for (i = 1; i < (rows.length - 1); i++) {                    var Switch = false;                    // Fetch 2 elements that need to be compared                    x = rows[i].getElementsByTagName("TD")[0];                    y = rows[i + 1].getElementsByTagName("TD")[0];                    // Check if 2 rows need to be switched                    if (x.innerHTML.toLowerCase() > y.innerHTML.toLowerCase()) {                        // If yes, mark Switch as needed and break loop                        Switch = true;                        break;                    }                }                if (Switch) {                    // Function to switch rows and mark switch as completed                    rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);                    switching = true;                }            }        }    </script></body></html> | 
Output:
Example 2: This example sorts the table using the same loop technique but executes the function for both the given columns, as well as in both directions (ascending and descending).
HTML
<!DOCTYPE html><html lang="en"><head>    <title>        How to sort rows in a table using JavaScript?    </title>    <style>        body {            text-align: center;        }        table,        th,        tr td {            border: 1px solid black;        }        th,        td {            padding: 3px 20px;        }        table {            margin: auto;        }    </style></head><body>    <h1 style="color:green">        zambiatek    </h1>    <h3>        Click on header to sort in        ascending and descending    </h3>    <table id="table">        <tr>            <!--Calls sortTable function(0 for                country and 1 for capital) when                headers are clicked-->            <th onclick="sortTable(0)">Country</th>            <th onclick="sortTable(1)">Capital</th>        </tr>        <tr>            <td>United states of America</td>            <td>Washington DC</td>        </tr>        <tr>            <td>India</td>            <td>New Delhi</td>        </tr>        <tr>            <td>Australia</td>            <td>Canberra</td>        </tr>        <tr>            <td>Germany</td>            <td>Berlin</td>        </tr>    </table>    <script>        // JavaScript program to illustrate        // Table sort for both columns and         // both directions        function sortTable(n) {            let table;            table = document.getElementById("table");            var rows, i, x, y, count = 0;            var switching = true;            // Order is set as ascending            var direction = "ascending";            // Run loop until no switching is needed            while (switching) {                switching = false;                var rows = table.rows;                //Loop to go through all rows                for (i = 1; i < (rows.length - 1); i++) {                    var Switch = false;                    // Fetch 2 elements that need to be compared                    x = rows[i].getElementsByTagName("TD")[n];                    y = rows[i + 1].getElementsByTagName("TD")[n];                    // Check the direction of order                    if (direction == "ascending") {                        // Check if 2 rows need to be switched                        if (x.innerHTML.toLowerCase() >                         y.innerHTML.toLowerCase()) {                                                         // If yes, mark Switch as needed                             // and break loop                            Switch = true;                            break;                        }                    } else if (direction == "descending") {                        // Check direction                        if (x.innerHTML.toLowerCase() <                         y.innerHTML.toLowerCase()) {                            // If yes, mark Switch as needed                            // and break loop                            Switch = true;                            break;                        }                    }                }                if (Switch) {                    // Function to switch rows and mark                     // switch as completed                    rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);                    switching = true;                    // Increase count for each switch                    count++;                } else {                    // Run while loop again for descending order                    if (count == 0 && direction == "ascending") {                        direction = "descending";                        switching = true;                    }                }            }        }    </script></body></html> | 
Output:
				
					


