Jeśli szukasz sortowania ciągów znaków w kolejności alfabetycznej, a nie liczb, oto przykładowy problem i jego rozwiązanie.
Przykład problemu: tablicy tablic (finalArray) z pierwszym wejściem a ścieżka katalogu i trzecim nazwa pliku; sortuj tak, aby tablica była układana najpierw według folderu, a wewnątrz identycznych folderów, według nazwy pliku.
E.g.po sortowaniu można oczekiwać:
[['folder1', 'abc.jpg'],
['folder1', 'xyz.jpg'],
['folder2', 'def.jpg'],
['folder2', 'pqr.jpg']]
Patrz Array.prototype.sort() - compareFunction
finalArray.sort((x: any, y: any): number => {
const folder1: string = x[0].toLowerCase();
const folder2: string = y[0].toLowerCase();
const file1: string = x[1].toLowerCase();
const file2: string = y[1].toLowerCase();
if (folder1 > folder2) {
return 1;
} else if (folder1 === folder2 && file1 > file2) {
return 1;
} else if (folder1 === folder2 && file1 === file2) {
return 0;
} else if (folder1 === folder2 && file1 < file2) {
return -1;
} else if (folder1 < folder2) {
return -1;
}
});
Pamiętaj, "Z" jest przed "A" (stolic najpierw według punkt kodowy Unicode), dlatego mam toLowerCase(). Problem, którego powyższa implementacja nie rozwiązuje, to "10abc" pojawi się przed "9abc".
One-liner 'data.sort (funkcja (x, y) {return x.count - y.count || x.year - y.year;});' –
@LucaSteeb Twoje rozwiązanie działało jak mistrz i uratowałem mój dzień. –
@cdhowie masz rację, naprawdę muszę w pełni zrozumieć, jak działają algorytmy sortowania. Usuwam moje komentarze, dziękuję. –