Hirdetés

Új hozzászólás Aktív témák

  • Jim-Y
    veterán

    Sziasztok!

    Lenne egy elég összetett problémám.
    Adott egy XML adatbázis, amiből egy HTML táblázatba gyűjtöttem ki az adatokat jQueryvel. Eddig minden jól ment. Azonban minden elemhez tartozik két string típusú változó (str1 és str2), amikre igaz, hogy str1 és str2 első néhány karaktere megegyezik, az egyező részt kell kivennem sz str2 stringből.

    Ezt a két stringet kéne összehasonlítania egy (szerintem) while ciklusnak, és kiköpnie egy i-t, ahol az i annak a karakternek a sorszáma, ami utolsóként megegyezik a két stringben. Ezzel az i-vel substringgel már el tudnám választani a str2 két részét. A segítségeteket kérném a while ciklushoz.

    Példa:

    str1 -- str2 ------ i
    alma -- aluljáró -- 2
    sarok - sarokpolc - 5
    kendő - kender ---- 4

    Ezen kívül egymás utáni rekordokban az str1 megegyezik, és az szeretném, hogy ugyanannyi (legkevesebb) karaktert válasszon ki nekik.
    alma - aluljáró - 2
    alma - almárium - 3
    alma - alváz ---- 2

    Tehát 2 kell eredményül itt.

    Az elsőre egy félkész megoldás lehet például:

    String.prototype.sameUntil = function(other) {
    var cvar = (this.length < other.length ? this.length : other.length);
    for(var i=0; i < cvar; ++i) {
    if(this.charAt(i) != other.charAt(i)) {
    return i;
    }
    }
    return cvar;
    }

    Azért félkész, mert a lehetséges buktatókat nem teszteltem ki, a példa adataidra jól működik, ha egyáltalán nem egyezik, akkor 0-t ad vissza. Illetve feltételezi, hogy az első karaktertől vett egyezést keresünk.

    A második kérdést én sem értem igazán. Itt valahogy mindenképp csoportosítanod kéne az ugyanolyan str1-hez tartozó adatokat. Ha pl egy tömbbe tudod valahogy tenni az alma stringhez tartozó str2-ket, akkor

    var almaArray = ["aluljáró", "almárium", "alváz"];

    console.log(almaArray.map(function(elem) {
    return "alma".sameUntil(elem);
    }).reduce(function(prev, curr) {
    return (prev < curr ? prev : curr);
    }));

    // 2

    De ha objektumba teszed, úgy is meg lehet oldani.

Új hozzászólás Aktív témák