Hirdetés

Keresés

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

  • sztanozs
    veterán

    Sziasztok!

    Akadt egy szemléleti problémám, és nem igazán tudom, mit kezdjek vele.

    Google Chrome böngészőben futna javascript (weboldal).

    Php alatt vannak asszociatív tömbjeim. Azokat kell átküldenem javascript alá. Szóval csinálok json-t, lesz belőle mondjuk ilyesmi: {"0":"0","5":"0"}. Javascript alatt fogadva, és visszaküldéshez json stringre alakítva (window.JSON.stringify) ugyan az így néz ki: [0,null,null,null,null,0].

    A problémám, hogy a kulcsok nem ilyen 0 meg 5, hanem mondjuk "134233184674" - 64 bites alkalmazás-unique integerek. Kicsit aggódom miatta, hogy azokból json-t csinálok javascript alól php alá visszaküldeni, a sok "null" miatt lepusztul minden.

    Akár objektumot is csinálhatnék tömb helyett, de a javascript nagyon nem szereti a számokból álló kulcsokat. A php-nak furcsa módon semmi baja vele.

    Eddig ami workaround-ot találni tudtam, hogy valami betűt rakok elé a számoknak, mondjuk 5 helyett "x5", de így cudar ronda. Ezt vissza is kell majd alakítanom, és milliószámra darabolhatom a stringeket.

    A problémám lényege, hogy javascript alatt a tömbök üres indexei egyáltalán léteznek. Van rá valami okosság elmagyarázni a javascriptnek, hogy legyen szíves számokból álló indexekkel asszociatív tömböt építsen?

    Ez a fajta asszociatív tömb nem létezik JS-ben, a legközelebbi az egy objektum, aminek string paraméterei vannak (ahogy át is jön json-ban). Ez nem tömbbe kell beleerőszakolni, hanem meg kell tartani objektumnak és stingként kell hivatkozni az elemekre:
    const json = '{"0":0, "5":0}';
    const obj = JSON.parse(json);
    console.log(obj[0]);
    console.log(obj[5]);
    console.log(obj);
    obj[8] = 1
    console.log(JSON.stringify(obj));
    > 0
    > 0
    > Object { 0: 0, 5: 0 }
    > "{"0":0,"5":0,"8":1}"

    A számból álló kulcsokat tényleg nem szereti JS, mert az objektum kulcsai csak stringek lehetnek.

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