Autor Zpráva
Honza_n
Profil *
Ahoj,
jak napsat toto do JS?

$a = array (
'm' => array ('mz1', 'mz2', 'md1', 'md2', 'ml1', 'ml2' ),
'z' => array ('zz1', 'zz2', 'zd1', 'zd2' ),
's' => array ('sz1', 'sz2' )
);


Díky
martindeveloper
Profil
Třeba

var a = {"m":["mz1","mz2","md1","md2","ml1","ml2"],"z":["zz1","zz2","zd1","zd2"],"s":["sz1","sz2"]};
    
alert(a['m'][1]); //vypíše mz2
Honza_n
Profil *
díky moc
Chamurappi
Profil
Reaguji na Honzu_n:
To, co uvádíš, není dvourozměrné pole, ale pole polí. Lépe řečeno: asociativní pole normálních polí.
JavaScript nepodporuje asociativní pole tak, jak jsou známá z jiných jazyků, ale podporuje objekty a práci s nimi pomocí zápisu obvyklého pro asociativní pole (jak uvádí martindeveloper).
Honza_n
Profil *
Šlo by to ještě upravit? Jelikož jsem si uvědomil, že těch instancí bude více, takže nebude jen var a, ale taky b, c, d ... atd. Takže bych to potřeboval všechno sjednotit do jednoho. Vím, že to mohu udělat tak, že na konec kodu přidám něco jako
var all['a']=a;
var all['b']=b;

Přesto ale možná to jde udělat všechno najednou. Myslím rozšířit ten kod od martindeveloper, tak aby na levé srraně bylo all= a na pravé všechno dohromady, instance a až z .
Nox
Profil
stylem
var all = {
  "a": {
    "m": ["mz1", "mz2",... ],
    "z": [...],
  },
  "b": {
    "m": ["mz1", ...],
    "z": [...],
  }
};

potom
alert( all["a"]["m"] );
//nebo
alert( all.a.m );
Honza_n
Profil *
Hm. Tak jo. Ale teď mě napadlo, jestli nebude problém s tím přistupováním. Včera jsem narazil na podobný problém v PHP. Totiž jde o to, že budu potřebovat zpracovat jednotlivé členy instance "a" pomocí cyklu. Tohle v PHP nejde, jelikož je to objekt, ne pole A jde to tady? No nevím, možná se bez toho cyklu obejdu, budu to řešit dneska. Ono to v podstatě bude fungovat tak, že ten první člen "a" definuje seznam dalších členů b, c, d, e .... Tak možná se bez cyklu obejdu.
Nox
Profil
Ne, ono JS je takové volnější řekl bych
for(list in all)
  for(item in list)
    for(var i=0;i<item.length;i++)
      do_something(item[i]);
Honza_n
Profil *
Tak to je paráda, díky
Chamurappi
Profil
Reaguji na Noxe:
for(item in list)
V iterační proměnné je u tohoto druhu cyklu vždy řetězec obsahující název členské proměnné, takže místo list by asi mělo být all[list] a pak uvnitř místo item také all[list][item].
Krom toho také nedoporučuji vynechávat var.
Nox
Profil
aha, díky za opravu, takže takto?

for(var list in all)
  for(var item in all[list])
    for(var i=0;i < all[list][item].length;i++)
      do_something(all[list][item][i]);

škoda že to nemá takový zkracující efekt jako foreach
Chamurappi
Profil
Reaguji na Noxe:
Ano, takto.

škoda že to nemá takový zkracující efekt jako foreach
Některé prohlížeče podporují i for each .. in — to jen pro zajímavost.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0