Avatar billede nielsbrinch Nybegynder
09. maj 2005 - 14:00 Der er 9 kommentarer og
1 løsning

Sortering af strenge med tal i array

Jeg har en række strenge som jeg sorterer med denne javascript-metode:

function arrSort(a,b)
{
  var as = a.split('¤')[0];
  var bs = b.split('¤')[0];
  var comparison = (as>bs)?1:(bs>as)?-1:0;
       
  return comparison;
}

Det fungerer fint i de fleste situationer, men jeg har opdaget en situation hvor det ikke virker så fint.

Hvis jeg har følgende strenge i mit array: "udbud_1_udbud", "udbud_2_udbud" og "udbud_10_udbud" sorterer javascript det på denne måde:

udbud_10_udbud
udbud_1_udbud
udbud_2_udbud

Hvor den "almindelige" sortering, som bla. benyttes i almindelige Compare-metoder i programmeringssprog, vil sortere det på denne måde:

udbud_1_udbud
udbud_10_udbud
udbud_2_udbud

Jeg har brug for at javascript-metoden sorterer ligesom sidstnævnte eksempel.

Nogle bud?
Avatar billede roenving Novice
09. maj 2005 - 14:14 #1
Hvad vil du da have ?-)

-- umiddelbart ville jeg splitte på "_" og så sammenligne den anden !-)
Avatar billede barklund Nybegynder
09. maj 2005 - 14:14 #2
Man kunne jo mene, at da _ (underscore) kommer efter 0 (nul) i ascii, så er det helt korrekt, at udbud_1_udbud kommer efter udbud_10_udbud. Men du vil gerne have det til at være omvendt?

Og sådan forholder almindelig sammenligning af strenge sig da i de fleste sprog - altså at _ kommer efter 0.
Avatar billede nielsbrinch Nybegynder
09. maj 2005 - 14:27 #3
I kan ikke regne med hvilke tekster der rent faktisk sorteres på. Ovenstående er kun eksempler. Så split på '_' vil f.eks. ikke fungere.

Jeg sammenligner med en Comparer i .NET.

as = udbud_10_udbud
bs = udbud_1_udbud

Sammenligning:

.NET: new CaseInsensitiveComparer().Compare(as, bs) giver 1
java script: (as>bs)?1:(bs>as)?-1:0 giver -1
Avatar billede nielsbrinch Nybegynder
09. maj 2005 - 14:45 #4
Du har egentligt ret barklund. Løsning må være at lave en ASCII-baseret sortering i .NET også, da det på en måde er JavaScript der har mest ret.
Avatar billede barklund Nybegynder
09. maj 2005 - 14:49 #5
Tjo :)
Avatar billede nielsbrinch Nybegynder
24. maj 2005 - 10:07 #6
barklund, læg et svar så vi kan lukke spørgsmålet.

Jeg lavede en ASCII-baseret sortering, char for char?
Avatar billede nielsbrinch Nybegynder
24. maj 2005 - 10:18 #7
Det var ikke et spørgsmål det sidste der ... det var bare det jeg gjorde :)
Avatar billede barklund Nybegynder
24. maj 2005 - 10:30 #8
Hehe, helt fint :)
Avatar billede barklund Nybegynder
24. maj 2005 - 10:38 #9
Tark for points :)
Avatar billede nielsbrinch Nybegynder
24. maj 2005 - 11:51 #10
Tark for hjælps :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester