①JavaScriptのarray.sort()は、要素を文字列として並べ替えます。つまり、数値の場合「1, 10, 11, 2, …」の順番になります。要素が数字の場合は数値として並べ替える(1, 2, …, 10, 11)ように指定しました。
②通常の並べ替えを行った場合、空白(null)が先頭に来てしまいます。昇順のときは空白が末尾、降順のときは空白が先頭に来るように、処理を追加しました。
③並べ替えられた後のデータの順番を知りたい。左端にNo列があることを前提としたコーディング例。
No | 数値1 | 数値2 | 文字1 | 文字2 | 大分類 | 小分類 |
---|---|---|---|---|---|---|
0 | 00 | A | あ | A市 | A町 | |
1 | 01 | B | い | A市 | B町 | |
2 | 02 | C | う | A市 | C町 | |
3 | 03 | D | え | B市 | A町 | |
4 | 04 | E | お | B市 | B町 | |
5 | 05 | F | か | B市 | C町 | |
6 | 06 | G | き | C市 | A町 | |
7 | 07 | H | く | C市 | B町 | |
8 | 08 | I | け | C市 | C町 | |
9 | 09 | J | こ | |||
10 | 10 | K | さ | |||
11 | 11 | L | し | |||
No | 市区町村コード | 区名 | ふりがな | 英語 | 面積 | 人口 |
---|---|---|---|---|---|---|
1 | 14101 | 鶴見区 | つるみく | tsurumi | 33.23 | |
2 | 14102 | 神奈川区 | かながわく | kanagawa | 23.73 | |
3 | 14103 | 西区 | にしく | nishi | 7.03 | |
4 | 14104 | 中区 | なかく | naka | 21.2 | |
5 | 14105 | 南区 | みなみく | minami | 12.65 | |
6 | 14106 | 保土ケ谷区 | ほどがやく | hodogaya | 21.93 | |
7 | 14107 | 磯子区 | いそごく | isogo | 19.05 | |
8 | 14108 | 金沢区 | かなざわく | kanazawa | 30.96 | |
9 | 14109 | 港北区 | こうほくく | kohoku | 31.4 | |
10 | 14110 | 戸塚区 | とつかく | totsuka | 35.79 | |
11 | 14111 | 港南区 | こうなんく | konan | 19.9 | |
12 | 14112 | 旭区 | あさひく | asahi | 32.73 | |
13 | 14113 | 緑区 | みどりく | midori | 25.51 | |
14 | 14114 | 瀬谷区 | せやく | seya | 17.17 | |
15 | 14115 | 栄区 | さかえく | sakae | 18.52 | |
16 | 14116 | 泉区 | いずみく | izumi | 23.58 | |
17 | 14117 | 青葉区 | あおばく | aoba | 35.22 | |
18 | 14118 | 都筑区 | つづきく | tsuzuki | 27.87 | |
(㎡) | (人) |
<script>
'use strict'
window.onload = function () {
document.querySelectorAll('table').forEach(function(table) {
if (table.tHead) {
table.tHead.querySelectorAll('th').forEach(function(th) {
th.classList.toggle('asc');
th.onclick = function(e) {
if (e.target.textContent != 'No') {
e.target.classList.toggle('asc');
e.target.classList.toggle('desc');
}
var cells = new Array();
for (let i = 0; i < table.tBodies[0].rows.length; i++) {
var cell = new Object();
cell.row = table.tBodies[0].rows[i];
cell.key = table.tBodies[0].rows[i].cells[e.target.cellIndex].textContent;
cells.push(cell);
}
if (e.target.classList.contains('desc')) {
cells.sort(desc);
} else {
cells.sort(asc);
}
for (let i = 0; i < cells.length; i++) {
cells[i].row.cells[0].textContent = i + 1;
table.tBodies[0].appendChild(cells[i].row);
}
};
});
}
});
};
function asc(a, b) {
if (a.key == '') return 1;
if (b.key == '') return -1;
if (!isNaN(a.key)) {
if (!isNaN(b.key)) {
return a.key - b.key;
}
}
if (a.key < b.key) return -1;
if (a.key > b.key) return 1;
return 0;
}
function desc(a, b) {
if (a.key == '') return -1;
if (b.key == '') return 1;
if (!isNaN(a.key)) {
if (!isNaN(b.key)) {
return b.key - a.key;
}
}
if (a.key < b.key) return 1;
if (a.key > b.key) return -1;
return 0;
}
</script>
コメント