Ich habe eine slickgrid mit dieser Filterung Plugin:Slickgrid Tabelle numerische Plugin Art
https://github.com/danny-sg/slickgrid-spreadsheet-plugins/blob/master/ext.headerfilter.js
Dies hat eine Sortiermerkmal:
filterPlugin.onCommand.subscribe(function (e, args) {
dataView.fastSort(args.column.field, args.command === "sort-asc");
});
Das für Text-Filterung funktioniert gut, aber die meisten meiner Daten sind numerisch. Wenn ich die Zahlen 1 bis 1000 filtere, sortiere ich als 1, 10, 100, usw.
Ich habe eine numerische Sortierfunktion, die ich online gefunden habe, aber es verdreht nur die Zahlen in zufälliger Reihenfolge.
function NumericSorter(a, b) {
var x = a[sortcol], y = b[sortcol];
return sortdir * (x == y ? 0 : (x > y ? 1 : -1));
}
Ich glaube, das Problem ist, weil sie ausgelegt ist mit der eingebauten in Arbeit slickgrid klicken Funktion zu sortieren, also muß ich es anpassen mit dem Tabellenkalkulations Art zu arbeiten, aber ich verstehe nicht, die Art Funktion genug, um dies zu tun.
Dies ist mein Code so weit:
filterPlugin.onCommand.subscribe(function (e, args) {
dataView.fastSort(args.column.field, args.command === "sort-asc");
//MD added
if (args.column.field == "linenum") {
dataView.sort(NumericSorter, args.sortAsc);
// alert("numeric sort");
} else {
dataView.fastSort(args.column.field, args.command === "sort-asc");
// alert("text sort");
}
});
Wie kann ich numerische Sortierung erreichen?
Dank Ben für alle Hintergrundinformationen zum Sortieren, sehr geschätzt. Ich habe meinen Code wie von Ihnen vereinfacht und es funktioniert gut für die Sortierung von Zeichenfolgen, aber nicht für Zahlen. Ich nehme an, das Problem ist, dass es sich um Strings handelt, nicht um Zahlen. Es ist seltsam, weil ich sie der Datenansicht in diesem Format hinzufüge "d [" lineum "] = i + 1;', was mir 0, 1, 2, etc. – matt9292
gibt Auch mit diesem Code sortiert er immer noch die Zahlen als Text, Kannst du bitte weitere Hilfe leisten? 'Funktionsvergleicher (a, b) { varx = a [sortcol], y = b [sortcol]; // wenn es eine Nummer ist: if (! IsNaN (parseFloat (x))) { x = parseFloat (x); } if (! IsNaN (parseFloat (y))) { y = parseFloat (y); } Rückkehr (x == y? 0: (x> y? 1: -1)); } ' – matt9292