Hallo zusammen,
vorab: ich bin totaler Anfänger. Von daher habt bitte Verständnis, wenn meine Fragen etwas holprig rüber kommen
Hier meine Frage. Ich habe einen Java Code, der in einer Spalte "RG" in meiner Tabelle die Rechnungsnummern sortieren soll. Die Rechnungsnummern liegen alle im Format "RG-XXXXX" vor, wobei X für eine Zahl steht. Die Sortierung soll über einen Button ausgelöst werden und dann entweder aufsteigend oder absteigend erfolgen. Leider spuckt das Ergebnis ständig nur eine neue willkürliche Zusammenstellung von Sortierungen aus, die alles andere als den genannten Anforderungen entsprechen. Kann jemand anhand des Codes erkennen, wo hier mein Fehler liegt?
Vielen lieben Dank vorab!
Achim
vorab: ich bin totaler Anfänger. Von daher habt bitte Verständnis, wenn meine Fragen etwas holprig rüber kommen
Hier meine Frage. Ich habe einen Java Code, der in einer Spalte "RG" in meiner Tabelle die Rechnungsnummern sortieren soll. Die Rechnungsnummern liegen alle im Format "RG-XXXXX" vor, wobei X für eine Zahl steht. Die Sortierung soll über einen Button ausgelöst werden und dann entweder aufsteigend oder absteigend erfolgen. Leider spuckt das Ergebnis ständig nur eine neue willkürliche Zusammenstellung von Sortierungen aus, die alles andere als den genannten Anforderungen entsprechen. Kann jemand anhand des Codes erkennen, wo hier mein Fehler liegt?
Vielen lieben Dank vorab!
Achim
Javascript:
function sortTableByRG() {
// Überprüfen, ob die Tabelle Datensätze enthält
if (table.rows.length < 1) {
alert('Die Tabelle enthält keine Datensätze zum Sortieren.');
return;
}
// Zeile mit ID "rowPlaceholder" aus der Tabelle entfernen
var rowPlaceholder = document.getElementById("rowPlaceholder");
if (rowPlaceholder) {
rowPlaceholder.parentNode.removeChild(rowPlaceholder);
}
// Weiter mit Sortiervorgang
var rows = Array.from(table.rows).slice(1); // Nur Datenzeilen sortieren
function compareRG(a, b) {
// Extrahiere die Nummern aus RG-XXXXX
var aNum = parseInt(a.cells[5].textContent.replace("RG-", ""));
var bNum = parseInt(b.cells[5].textContent.replace("RG-", ""));
// Vergleiche die extrahierten Nummern
if (aNum < bNum) {
return -1;
} else if (aNum > bNum) {
return 1;
} else {
return 0;
}
}
var rows = Array.from(table.rows).slice(1);
rows = mergeSort(rows, compareRG);
var sortOrder = table.getAttribute("data-sort-order");
if (sortOrder === "asc") {
rows = mergeSort(rows, compareRG);
table.setAttribute("data-sort-order", "desc");
} else {
rows = mergeSort(rows, compareRG);
rows.reverse();
table.setAttribute("data-sort-order", "asc");
}
// Füge die sortierten Zeilen zur Tabelle hinzu
var newTbody = document.createElement('tbody');
for (var i = 0; i < rows.length; i++) {
newTbody.appendChild(rows[i]);
}
table.replaceChild(newTbody, table.tBodies[0]);
// Füge Zeile mit ID "rowPlaceholder" wieder in Tabelle ein
if (rowPlaceholder) {
table.tBodies[0].appendChild(rowPlaceholder);
rowPlaceholder.style.display = "none";
}
// Aktualisiere die Nummerierung der Zeilen
updateRowNumbers();
}
function mergeSort(arr, compareFn) {
if (arr.length <= 1) {
return arr;
}
const middleIndex = Math.floor(arr.length / 2);
const leftArr = arr.slice(0, middleIndex);
const rightArr = arr.slice(middleIndex);
const sortedLeft = mergeSort(leftArr, compareFn);
const sortedRight = mergeSort(rightArr, compareFn);
return merge(sortedLeft, sortedRight, compareFn);
}
function merge(leftArr, rightArr, compareFn) {
let result = [];
let leftIndex = 0;
let rightIndex = 0;
while (leftIndex < leftArr.length && rightIndex < rightArr.length) {
if (compareFn(leftArr[leftIndex], rightArr[rightIndex]) < 0) {
result.push(leftArr[leftIndex]);
leftIndex++;
} else {
result.push(rightArr[rightIndex]);
rightIndex++;
}
}
return result.concat(leftArr.slice(leftIndex)).concat(rightArr.slice(rightIndex));
}