说我有下表:
<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中正确实现它。
答案 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]);
}
然后,如果要将其拆分为两个数组,则可以在数组上循环