Problem bei Sortierung von Rechnungsnummern mit JavaScript

ab4582

Neues Mitglied
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


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));
}
 
Hat sich bereits erledigt. Ich habe es selbst so gelöst:

Javascript:
// Funktion zum Sortieren nach Rechnungsnummer Neu
  function sortTableByRGNew() {
    var rows = Array.from(table.rows).slice(1);
    
    // Parse the RG value for each row and store it in a new property
    rows.forEach(function(row) {
    var rgString = row.cells[6].querySelector('input').value;
    var rgValue = parseInt(rgString.split('-')[1]);
    row.rgValue = rgValue;
    });
    
    // Determine the sort order based on the current state of the table
    var sortOrder = table.getAttribute("data-sort-order");
    if (sortOrder === "asc") {
    rows.sort(function(a, b) {
    return b.rgValue - a.rgValue;
    });
    table.setAttribute("data-sort-order", "desc");
    } else {
    rows.sort(function(a, b) {
    return a.rgValue - b.rgValue;
    });
    table.setAttribute("data-sort-order", "asc");
    }
    
    // Remove the existing rows from the table
    while (table.rows.length > 1) {
    table.deleteRow(1);
    }
    
    // Add the sorted rows back to the table
    rows.forEach(function(row) {
    table.appendChild(row);
    });
    
    // Update the row numbers
    updateRowNumbers();
    }
 

Zurück
Oben