Keresés

Hirdetés

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

  • Karma

    félisten

    válasz r4z #3990 üzenetére

    Nem igazán értem a második feladatot...

    De az elsőhöz egy for ciklus kell ami végigmegy 0-tól a rövidebbik string hosszáig vagy ameddig egyeznek az i-edik karakterek.

    [ Szerkesztve ]

    “All nothings are not equal.”

  • Jim-Y

    veterán

    válasz r4z #3990 üzenetére

    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.

  • Karma

    félisten

    válasz r4z #3993 üzenetére

    Hát, ez egy remek indikátora annak, hogy az adatforrásod nem fain. Nem utólag kéne kitalálnod, hogy egy fulltext mezőnek melyik része a gyártó, és hol kezdődik a termék...

    Legalábbis semmiképp se a JS kódnak, hanem valami köztes résznek amivel a JS kommunikál.

    Nade persze azzal kell főzni, ami van. Nekem is volt már ilyen bemenetem (autótípusok, pl. FIAT BRAVA xxxx yyyy... és ebből a FIAT-ot kellett leválogatnom). Végülis ez ugyanaz, de én shortcutot találtam hozzá: az első szót leveszem, a kéttagú neveket meg kontansként eltettem és kivételként kezelem. A hasznaltauto.hu jó forrás volt.

    [ Szerkesztve ]

    “All nothings are not equal.”

  • Karma

    félisten

    válasz r4z #4003 üzenetére

    Ez a három szakasz a lényeg:

    var manufacturers = _.groupBy(inputdata, function (product) {
    return product.Gyarto;
    });

    Azaz magyarra fordítva az underscore groupBy függvényt: "csoportosítsd az inputdata tömb elemeit a Gyarto property értéke alapján". Ezután a manufacturers egy olyan objektum, amiben a kulcsok a gyártók, az értékek pedig az oda tartozó termékek listája.

    var manufacturerPrefixLengths = _.map(manufacturers, function (products, manufacturer) {
    return {
    manufacturer: manufacturer,
    prefix: _.min(products.map(function (product) {
    return product.Tipus.sameUntil(manufacturer);
    }))
    };
    });

    Itt van az összehasonlítás meghívva. A map függvény veszi egy lista vagy objektum elemeit, ráhív egy függvényt egyesével mindre, az eredményeket pedig egy új listába fűzi össze. Más szóval transzformálja a listát.

    Magyarul: "Minden gyártó-terméklista párt képezz le egy olyan objektumra, ami tartalmazza a gyártó nevét (manufacturer kulccsal), és az egyezések minimumát (prefix kulccsal)." A min függvény visszaadja egy lista minimumát.

    A terméklistából prefixhosszlistát meg egy belső map képez, ami minden terméket leképez a gyártó nevével vett egyező szakasz hosszára.

    var result = _.object(_.map(manufacturerPrefixLengths, function(x){return [x.manufacturer, x.prefix]}));

    Ez az utolsó hívás pedig annyit tesz, hogy az előző lépésben generált listát, amiben a {manufacturer, prefix} objektumok voltak, egy valódi objektumra alakítja át.

    “All nothings are not equal.”

  • Karma

    félisten

    válasz r4z #4006 üzenetére

    Tegyél ez a sor elé egy olyat, hogy "console.log(product)", és kiderül, miért undefined a product.Tipus.

    Egyébként ennyiből nem tudom megmondani...

    “All nothings are not equal.”

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