-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsort.js
More file actions
103 lines (78 loc) · 2.75 KB
/
Copy pathsort.js
File metadata and controls
103 lines (78 loc) · 2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/**
* Trie un tableau selon une colonne dans l'ordre crooissant
* @param {Array} table Tableau à trier
* @param {string} filter Colonne selon laquelle trier le tableau
* @author Bastien POMMIER
* @copyright ISEN-CAEN CIR1 - 2025
*/
function sortTable(table) {
let filter = getSelectValue(sortFilter);
if (filter == "") {
afficherPage(1, table);
return;
}
table.forEach((object, id) => { // "object" n'est pas utile, on utilise juste l'index
compareData(table, id, filter);
});
afficherPage(1, table);
}
/**
* Compare deux lignes successives d'un tableau, puis les trie dans l'ordre croissant
* @param {Array} table Tableau contenant les données (objets)
* @param {int} i Indice de la 2e ligne
* @param {string} filter Colonne selon laquelle trier le tableau
* @author Bastien POMMIER
* @copyright ISEN-CAEN CIR1 - 2025
*/
function compareData(table, i, filter) {
if (i == 0) return;
if (isNaN(table[i][filter])) {
let temp = table[i];
table.splice(i, 1);
table.push(temp);
return;
}
while (table[i][filter] < table[i-1][filter]) { // Si l'élément est plus petit que le précédent...
[table[i], table[i-1]] = [table[i-1], table[i]]; // ... on inverse les 2
if (--i <= 0) return; // Et on revient en arrière dans le tableau jusqu'à avoir remis l'élément à sa place
}
}
/**
* Crée un nouveau tableau avec moins d'éléments, qui dépendent du filtre et de la valeur donnés
* @param {Array} table Tableau source (objets)
* @param {string} filter Colonne sur laquelle appliqur le filtre
* @param {*} value Donnée de la colonne à conserver
* @returns {Array} Retourne le tableau créé
* @author Bastien POMMIER
* @copyright ISEN-CAEN CIR1 - 2025
*/
function filterTable(table, filter, value) {
return table.filter(item => {
return item[filter] == value;
});
}
/**
* Applique tous les filtres actifs sur l'ensemble de la BDD
* @param {Array} musees Tableau source
* @returns {Array} Retourne le tableau filtré puis trié
* @author Bastien POMMIER
* @copyright ISEN-CAEN CIR1 - 2025
*/
function applyFilters(musees) {
filters.forEach(item => {
if (item[0].value != "") musees = filterTable(musees, item[1], item[0].value);
});
sortTable(musees);
return musees;
}
/**
* Trouve la valeur de l'option sélectionnée dans un sélecteur HTML
* @param {HTMLElement} select Sélecteur dont chercher l'option
* @returns {String} Retourne la valeur de l'option sélectionnée
* @author Bastien POMMIER
* @copyright ISEN-CAEN CIR1 - 2025
*/
function getSelectValue(select) {
let id = select.options.selectedIndex;
return select.options[id].value;
}