Prve, co mi napadlo, bolo pouzitie metody sort(), ale ta zoradila tak nestastne, ze najprv isli velke pismena, potom specialne znaky a potom male pismena. Tak som zacal googlit, ale nic moc som nenasiel, len zopar funkcii, ktore bud nefungovali tak, ako som chcel, alebo nefungovali vobec.
Najlepsie z toho vysla tato funkcia:
Kód: Vybrať všetko
Array.prototype.naturalSort = function() {
var p, q, valueOf = function(t) {
return isNaN(t) ? t.charCodeAt(0) :
Number(t) - Math.pow(2,32);
};
return this.sort(function(a,b) {
var values = [a,b].map(function(s) {
return s.toString().toLowerCase()
.match(/([a-z]|[0-9]|[\[\]\(\)]+(?:\.[0-9]+)?)/ig);
});
a = values[0]; b = values[1];
for (var i = 0, n = Math.min(a.length, b.length); i < n; i++) {
p = valueOf(a[i]), q = valueOf(b[i]);
if (p != q) return p - q;
}
return a.length - b.length;
});
};
Takze potrebujem nejake lepsie riesenie. Tej funkcii, ktoru som sem postol, skoro vobec nerozumiem, snazil som sa ju upravit tak, aby isli najprv vsetky specialne znaky, a pre zaciatok som namiesto vsetkych specialnych znakov urcil len zatvorky ( ) [ ] (vid regularny vyraz). Lenze ja nie som s regularnymi vyrazmi moc kamarat, tak prosim aj o radu, ako to spravit tak, aby v zoradenom poli isli najprv vsetky specialne znaky, zatvorky atd, potom cislice, a nakoniec pismena nezavisle na velkosti.
Nemate niekto niekde takuto funkciu? Dost by bodla
(Ka+ za pomoc zarucena)
//edit: no a teraz som skusil pomocou klasickej metody sort() zoradit tych 1700 poloziek, a tu rovnako prehliadac dvakrat zamrzol.... tak co s tym?