你如何使用原始javascript按字母顺序对两列表进行排序?

时间:2016-04-08 15:11:35

标签: javascript arrays algorithm sorting html-table

说我有下表:

<table border="1">
    <tr class="row">
        <td>mammal</td><td>dog</td>
    </tr>
    <tr class="row">
        <td>fish</td><td>goldfish</td>
    </tr>
    <tr class="row">
        <td>plant</td><td>bush</td>
    </tr>
    <tr class="row">
        <td>plant</td><td>tree</td>
    </tr>
    <tr class="row">
        <td>mammal</td><td>cat</td>
    </tr>
    <tr class="row">
        <td>fish</td><td>shark</td>
    </tr>
</table>

我正在尝试按字母顺序对此表进行排序。我想先按第一列对其进行排序,然后在“每个类别”的基础上对第二列进行排序。所以我要找的最终结果是:

fish    |  goldfish

fish    |  shark

mammal  |  cat

mammal  |  dog

plant   |  bush

plant   |  tree

如何使用Javascript执行此二维排序?我最初的想法是创建一个行数组(克隆,而不是实际的元素),然后对它们进行排序,删除表的innerHTML,然后逐个按顺序注入克隆。

我正在努力使用实际的排序算法,哪种众所周知的算法最适合用于两列,以及如何在Javascript中正确实现它。

2 个答案:

答案 0 :(得分:0)

假设表id是myTable,这将重新排序并显示表。

<script type="text/javascript">
    function sortRows(a,b)
    {
        return a.first > b.first || (a.first == b.first && a.second > b.second);
    }
    var table = document.getElementById('myTable');
    var rows = new Array();
    for (var i = 0; i < table.rows.length; i++)
    {
        rows.push({ 'first': table.rows[i].cells[0].innerHTML, 'second': table.rows[i].cells[1].innerHTML });
    }
    var sortedRows = rows.sort(sortRows);
    for(var i = 0; i < sortedRows.length; i++)
    {
        table.rows[i].cells[0].innerHTML = sortedRows[i].first;
        table.rows[i].cells[1].innerHTML = sortedRows[i].second;
    }
</script>

我使用了innerHTML,但它可能是innerText。

答案 1 :(得分:-1)

首先您需要为表格分配 ID ,然后尝试下面的代码(例如,我在此使用 mytable 作为 ID 样品)

var table = document.getElementById("mytable");
var firstArray = new Array();
for (var i = 0; i < table.rows.length; i++) {
    firstArray.push(table.rows[i].cells[0].innerHTML + "-" + table.rows[i].cells[1].innerHTML);
}
// now perform a basic sort
for (var i = 0; i < firstArray.length; i++) {
    for (var ii = i + 1; ii < firstArray.length; ii++) {
        if (firstArray[i] > firstArray[ii]) {
            var tmp = firstArray[i];
            firstArray[i] = firstArray[ii];
            firstArray[ii] = tmp;
        }
    }
}
// display results
for (var i = 0; i < firstArray.length; i++) {
    console.log(firstArray[i]);
}

然后,如果要将其拆分为两个数组,则可以在数组上循环