Avatar billede elskermad.dk Nybegynder
12. juli 2007 - 15:02 Der er 9 kommentarer og
1 løsning

Dobbelt sorteringsfunktion

Hej Eksperter!

Jeg har denne funktion som sortere mine auktioner efter hvornår de er slutte:

function sorterefterslut(a,b){
    return ((a.getAttribute('slut') > b.getAttribute('slut'))? 1 : (a.getAttribute('slut') == b.getAttribute('slut')? 0 : -1));
}

Den fungerer som den skal, men kunne godt tænkes mig at få den udvidet til at tage endnu en attribute i betragtning, nemlig 'fokus'.

Hvis fokus-attributten er 1 skal den være over alle andre med 0 også selvom den slutter før (den skal også være over alle andre 1'ere hvis de slutter efter)

Hvordan får jeg sådan en dobbelt sortering lavet?

Jeg bruger sorteringsfunktionen således:

function sorter() {
    placering    = document.getElementById('auktioner');
    divs        = new Array();
   
    while(placering.childNodes.length) {
        divs[divs.length] = placering.firstChild;
       
        placering.removeChild(placering.firstChild);
    }
   
    divs.sort(sorterefterslut);
   
    for (i=0;i<divs.length;i++) {
        placering.appendChild(divs[i]);
    }
}

På forhånd tak :)
Avatar billede elskermad.dk Nybegynder
12. juli 2007 - 15:23 #1
jeg tror jeg fandt ud af det, men tror ikke det er den optimale måde jeg har brugt, så vil gerne høre jeres idéer :)
Avatar billede roenving Novice
12. juli 2007 - 16:21 #2
F.eks.

function sorterefterslut(a,b){
    return (a.getAttribute('fokus') > b.getAttribute('fokus') || a.getAttribute('fokus') == b.getAttribute('fokus') && a.getAttribute('slut') > b.getAttribute('slut')? 1 : a.getAttribute('fokus') == b.getAttribute('fokus') && a.getAttribute('slut') == b.getAttribute('slut')? 0 : -1);
}
Avatar billede olebole Juniormester
13. juli 2007 - 13:00 #3
<ole>

Da sorteringsfunktioner er noget, der ofte kører i 'lange ringe', har jeg tilladt mig at optimere dine funktioner en anelse. Jeg er kommet til følgende:

function sorterefterslut(a, b) {
    var aF = a.getAttribute('fokus'),
    bF = b.getAttribute('fokus'),
    aS = a.getAttribute('slut'),
    bS = b.getAttribute('slut');
   
    if ( (aF=="0"&&bF=="1") || ((aF==bF) && aS>bS)) return 1;
    else if ( (aF==bF) && aS==bS ) return 0;
    return -1;
}

function sorter() {
    var placering = document.getElementById('auktioner'),
    divs = new Array(), i = 0;
   
    while (placering.firstChild) {
        divs[i++] = placering.firstChild;
        placering.removeChild(placering.firstChild);
    }
   
    divs.sort(sorterefterslut);
   
    for (var i=0,j=divs.length; i<j; i++) {
        placering.appendChild(divs[i]);
    }
}

- men jeg ser meget gerne, hvis roenving lige tjekker rigtigheden af koden i sorterefterslut-funktionen. Det er den slags situationer, hvor man (Læs: jeg) let kommer til at overse en enkelt tilstand  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
13. juli 2007 - 13:02 #4
- nuvel, i++ er vistnok marginalt langsommere end i+=1 og i=i+1 ... men den detalje er jeg sprunget over  =)
Avatar billede roenving Novice
18. juli 2007 - 23:53 #5
-- i en sorteringsfunktion skal der vel returneres 1, hvis a skal sorteres før b, altså er det hvis aF er 1 og bF er 0, at der ubetinget skal returneres dette 1-tal ...

Tilfælde:

aF == 1 og bF == 0 -- returnér 1 (i mit eksempel forkortet til aF > bF !-)
aF == bF && aS > bS -- returnér 1
aF == bF && aS == bS -- returnér 0

-- ellers er aF < bF eller aF == bF samtidig med at aS < bS, så -1 skal returneres !o]
Avatar billede olebole Juniormester
19. juli 2007 - 12:27 #6
Dooohhhh ... naturligvis skal første linje hedde:
    if ( (aF=="1"&&bF=="0") || ((aF==bF) && aS>bS)) return 1;

Tak, for rettelsen  =)

En lille 'flueting' er så, at f.eks. aF ikke er 1 eller 0, men derimod "1" eller "0" (getAttribute returnerer altid en streng - uanset, hvordan attributten er skrevet i markup'en). Det betyder dog intet i denne situation ... derfor 'flueting'  ;o)
Avatar billede roenving Novice
21. juli 2007 - 04:43 #7
Jepz !-)
Avatar billede elskermad.dk Nybegynder
22. juli 2007 - 19:00 #8
smider i nogen svar? :)
Avatar billede roenving Novice
25. juli 2007 - 17:56 #9
Velbekomme '-)
Avatar billede roenving Novice
21. oktober 2007 - 04:59 #10
Tak for point ;~}
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