Avatar billede roz Nybegynder
25. juli 2008 - 18:58 Der er 6 kommentarer og
1 løsning

Forklaring af kort JS funktion

Hejsa,
nu jeg ikke den helt store JS haj og istedet for selv at sidde og slå alle funktionerne op og prøve at regne funktionen ud søger jeg lige lidt hjælp herinde :)

Søger altså en forklaring af hvad følgende funktion helt konkret gør. Kommentarer indsat i koden er nok at foretrække men hvis du kan forklare det blot med ord er det også fint for mig :)

Funktionen: (tager en enkelt parameter st som er et nummer)
if ( st == null ) return false;
    if (st.length > 19)
    return false;
    sum = 0; mul = 1; l = st.length;
    for (x = 0; x < l; x++) {
    digit = st.substring(l-x-1,l-x);
    tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
        sum += (tproduct % 10) + 1;
    else
        sum += tproduct;
    if (mul == 1)
        mul++;
    else
        mul--;
    }
    if ((sum % 10) == 0)
    return true;
    else
    return false;
Avatar billede w13 Novice
25. juli 2008 - 19:08 #1
// Hvis der ikke er overført parametret st til funktionen, så stopper den.
    if ( st == null ) return false;
    // Hvis st har over 19 tegn, så stopper funktionen.
    if (st.length > 19) return false;

    sum = 0; mul = 1; l = st.length;

    //En løkke som kører for hvert tegn i st.
    for (x = 0; x < l; x++) {

    //Henter det tegn, den er nået til.
    digit = st.substring(l-x-1,l-x);
    tproduct = parseInt(digit ,10)*mul;

    if (tproduct >= 10)
        sum += (tproduct % 10) + 1;
    else
        sum += tproduct;
    if (mul == 1)
        mul++;
    else
        mul--;
    }
    if ((sum % 10) == 0)
    return true;
    else
    return false;

Den sidste del er forskellige udregninger. "%"-tegnet betyder "modulus", dvs. den rest der er tilbage ved division. Så "tproduct % 10" betyder "resten, når man dividerer tproduct med 10".

Jeg har ingen anelse om, hvad funktionens formål er. :) Hvor har du den fra, hvad skal du bruge den til, hvorfor ved du ikke, hvad den gør?
Avatar billede w13 Novice
04. august 2008 - 11:47 #2
? :)
Avatar billede nielle Nybegynder
04. august 2008 - 12:29 #3
Denne stump kode:

    if (mul == 1)
        mul++;
    else
        mul--;

- kunne lige så godt have været:

    if (mul == 1)
        mul = 2;
    else
        mul = 1;

Tallet i st får derfor følgende behandling:

1. ciffer ganges med 1
2. ciffer ganges med 2
3. ciffer ganges med 1
4. ciffer ganges med 2
5. ciffer ganges med 1
osv.

I de tilfælde hvor der ganges med 1, vil denne stump kode:

    if (tproduct >= 10)
        sum += (tproduct % 10) + 1;
    else
        sum += tproduct;

- blot lægge cifferet til variablen sum (fordi at tproduct = cifferet < 10).

I de tilfælde hvor der ganges med 2, vil koden skelne mellem om ciffret er over eller under 5. 5 ganges nemlig med 2 og bliver til 10.

A) Er den over tages modulus og der lægges 1 til: 7 -> 14 -> 4 -> 5 (dette tal vil forresten altid være ulige).
B) Er den under ganges der bare med 2: 4 -> 8 (dette tal vil altid være lige).

Dette tal lægges til sum.

Til sidst tjekkes det om sum er deleligt med 10; Der retuneres sand hvis den er, og falsk ellers.

Hvad formålet med funktionen er står derimod hen i det uvisse. ;^)
Avatar billede nielle Nybegynder
16. september 2008 - 12:54 #4
Hvad med noget respons?
Avatar billede roz Nybegynder
28. april 2011 - 14:19 #5
Tak for hjælpen - sikker på det hjalp dengang. Smid et svar hvis i vil have point :)
Avatar billede w13 Novice
28. april 2011 - 14:22 #6
Her er et svar fra mig, hvis du ku' bruge det til noget. =)
Avatar billede w13 Novice
28. april 2011 - 14:41 #7
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