NEWS
[gelöst]: array sortieren nach 2 werten
-
ich habe ein array, welches nach 2 werten sortiert werden soll - die funktion dazu ist
hat jmd eine idee dazu? evtl. @paul53 vielleicht hast du nochmal lust mir schon wieder zu helfenif (sortList==1) { myArr.sort( function(a, b) { if (a[5] === b[5]) { // hier wird nach zahlen sortiert return b[4] - a[4]; } return a[5] > b[5] ? 1 : -1; }); } else { myArr.sort( function(a, b) { if (a[5] === b[5]) { // hier werden strings sortiert return b[0].toUpperCase() - a[0].toUpperCase(); } return a[5] > b[5] ? 1 : -1; }); }
im ersten block (sortlist=1) sind die werte für b[4] - a[4] zahlen - da funktioniert es
im 2ten block sind b[0] - a[0] strings - da funktioniert es nicht
da ich das ganze aus github kopiert habe, weiß ich leider nicht, wie ich den 2ten block ändern muss, damit mit strings sortiert werden kannbeispiel erster block - das datum ist richtig sortiert - in der tabelle sieht man die werte arr[5] nicht - das sind die gelben überschriften
im 2ten block soll nach der ersten spalte sortiert werden
-
@liv-in-sky
String-Vergleiche funktionieren nur, wenn die Strings gleich lang sind, also die Werte führende 0 enthalten.
Tipp: Wandle in der Funktion erst a[5] und b[5] in Zahlen (Minuten).@liv-in-sky sagte in frage: array sortieren nach 2 werten:
return b[0].toUpperCase() - a[0].toUpperCase();
Was soll eine Substraktion von Strings ergeben ?
return a[0].toUpperCase() > b[0].toUpperCase() ? 1 : -1;
-
@liv-in-sky Vielleicht hilf das kleine Beispiel
//https://stackoverflow.com/questions/4340227/sort-mixed-alpha-numeric-array var reA = /[^a-zA-Z]/g; var reN = /[^0-9]/g; function sortAlphaNum(a, b) { var aA = a.replace(reA, ""); var bA = b.replace(reA, ""); if (aA === bA) { var aN = parseInt(a.replace(reN, ""), 10); var bN = parseInt(b.replace(reN, ""), 10); return aN === bN ? 0 : aN > bN ? 1 : -1; } else { return aA > bA ? 1 : -1; } } console.log( ["A1", "A10", "A11", "A12", "A2", "A3", "A4", "B10", "B2", "F1", "F12", "F3"].sort(sortAlphaNum) )
-
@paul53 (mein problem war ja, das es keinen sinn macht, das strings von einander abgezogen werden ) genau dafür habe ich ersatz gesucht
@fastfoot (ds beispiel funktioniert nur, wenn keine leerzeichen vorhanden sind und mind. eine zahl im text steht - sonst macht parseInt ein "NAN" ergebnis - bei mir soll es nur um alphabeitisch sortierung gehen)
danke für eure inputs - hat etwas gedauert habe aber dadurch eine lösung gefunden
myArr.sort( function(a, b) { var aA = a[5]//.replace(reA, ""); var bA = b[5]//.replace(reA, ""); if (aA === bA) { return a[0].toLowerCase().localeCompare(b[0].toLowerCase()); } });