【发布时间】:2018-07-06 18:51:15
【问题描述】:
我无法理解数组方法sort() 的逻辑。我必须为Age 和Letter 这两个元素编写一个eventListener。通过单击它们,我们可以按年龄和字母对表格进行排序。
一切正常,但我在sort() 逻辑中看到了一些奇怪的东西。通过单击Letter - 表必须按字母排序Letter 列中的元素。通过单击Age - 表必须按数字顺序对Age 列中的元素进行排序。但它排序不正确。
tbody = document.getElementById('grid');
function tableSort(event) {
var target = event.target;
var action = target.getAttribute('data-type');
var arr = [].slice.call(grid.rows, 1);
var self = this;
this.number = function() {
arr.sort(function(a, b) { // sort by digits in the column "Age"
a.cells[0].innerHTML;
b.cells[0].innerHTML;
return a - b;
});
grid.appendChild(...arr);
}
this.string = function() {
arr.sort(function(a, b) { // sort by words in the column "Letter"
a.cells[1].innerHTML;
b.cells[1].innerHTML;
return a > b;
});
grid.appendChild(...arr);
}
if (action) {
self[action]();
}
}
tbody.addEventListener('click', tableSort);
th {
cursor: pointer;
}
<table id="grid">
<thead>
<tr>
<th data-type="number">Age</th>
<th data-type="string">Letter</th>
</tr>
</thead>
<tbody>
<tr>
<td>5</td>
<td>BBBBB</td>
</tr>
<tr>
<td>12</td>
<td>AAAAA</td>
</tr>
<tr>
<td>1</td>
<td>DDDDD</td>
</tr>
<tr>
<td>9</td>
<td>CCCCC</td>
</tr>
<tr>
<td>2</td>
<td>KKKKK</td>
</tr>
</tbody>
</table>
<script>
</script>
【问题讨论】:
-
a.cells[0].innerHTML;是空操作 -
顺便说一句,垂直的称为“列”而不是“行”。
-
@Bergi 感谢您突出我的自动错误。但这不是解决方案。以前我尝试过
letters的另一种方式,但它也无济于事:arr.sort((a, b)=>{ return a.cells[1].innerHTML > b.cells[1].innerHTML ? 1 : -1; });
标签: javascript arrays sorting