Autor Zpráva
Visitor
Profil *
Zdravim
resim problem pruchodu pole nasledujici struktury:

pole[1]['A'][1] = new Array();
pole[1]['A'][1]['ID'] = 15;
pole[1]['A'][1]['nazev'] = "nejaky textik";

pole[1]['A'][2] = new Array();
pole[1]['A'][2]['ID'] = 22;
pole[1]['A'][2]['nazev'] = "nejaky textik2";

pole[1]['B'][1] = new Array();
pole[1]['B'][1]['ID'] = 233;
pole[1]['B'][1]['nazev'] = "nejaky textik3";

pole[2]['C'][1] = new Array();
pole[2]['C'][1]['ID'] = 2002;
pole[2]['C'][1]['nazev'] = "nejaky textik4";

Potrebuji se dostat ke vsem dvojicim ID - NAZEV. Bezne to pouzivam k filtraci kde ziskam prvni a druhy index a treti si projdu. Problem mi vznika pri praci s textovym indexem (muze tam byt slozitejsi retezec nez A,B,C). Tam nebude fungovat neco jako:

for (i = 1; i < pole.length; i++) {
pole[i]...
...

Da se nejak jednoduse obejit prvni dva indexy a pracovat jen s pole[...][...]['ID'] a pole[...][...]['nazev'] nejlepe s nejakou NEXT() syntaxi :) ?
tiso
Profil
Na takéto veci sa používa foreach, nie for
Takže použi 3x vnorený foreach
los
Profil *
Asi potrebuješ použiť konštrukciu for..in, pričom namiesto poľa použiješ objekt:
var obj = {"a": 1, "b": 2};

for (key in obj)
alert(key + ": " + obj[key]);


V tvojom prípade asi nejako takto (písal som to v tejto textaree, takže tam môžu byť nejaké chyby):
var pole = [

{ A: [{ID: 15, nazev: "nejaky textik"}, {ID: 22, nazev: "nejaky textik2"}],
B: [{ID: 233, nazev: "nejaky textik3"}]
},
{ C: [{ID: 2002, nazev: "nejaky textik4"}] }
];

for (var i = 0; i < pole.length; ++i)
for (var key in pole[i])
alert(pole[i][key].ID + ": " + pole[i][key].nazev);
Visitor
Profil *
los: do struktury nechci sahat tu beru jako danou.
tiso: jo to me napadlo ale nejsem si zcela jist konkretnim pouzitim muzes blize nakopnout?
los
Profil *
Visitor
Štruktúru meniť nemusíš, skrátka použiješ for (key in pole[i])...
Visitor
Profil *
los: zkusim to

vylekalo me toto:


var pole = [

{ A: [{ID: 15, nazev: "nejaky textik"}, {ID: 22, nazev: "nejaky textik2"}],

B: [{ID: 233, nazev: "nejaky textik3"}]

},

{ C: [{ID: 2002, nazev: "nejaky textik4"}] }

];
Petroff
Profil
Tady to máš - vyzkoušej a pak nahraď obsah bloku {} vlastním zpracováním.
Co se stalo se všemi 0-tými prvky ??? ( pole začíná přece prvkem pole[0].....?!? )

<HTML><HEAD>
<script>
pole = new Array();
pole[1] = new Object();
pole[1]['A'] = new Array();
pole[1]['A'][1] = new Array();
pole[1]['A'][1]['ID'] = 15;
pole[1]['A'][1]['nazev'] = "nejaky textik";

pole[1]['A'][2] = new Array();
pole[1]['A'][2]['ID'] = 22;
pole[1]['A'][2]['nazev'] = "nejaky textik2";

pole[1]['B'] = new Array();
pole[1]['B'][1] = new Array();
pole[1]['B'][1]['ID'] = 233;
pole[1]['B'][1]['nazev'] = "nejaky textik3";

pole[2] = new Object();
pole[2]['C'] = new Array();
pole[2]['C'][1] = new Array();
pole[2]['C'][1]['ID'] = 2002;
pole[2]['C'][1]['nazev'] = "nejaky textik4";

function zpracuj(pip){
for (var i = 1; i < pip.length; i++)
for(var j in pi=pip[i])
for (var k = 1; k < pi[j].length; k++)
{ for(var l in p=pi[j][k]) document.write(l,"=",p[l],"<BR>");
document.write("<HR>")
}
}
</script>
</HEAD>
<BODY style="margin:2em;font-size:1em">
<script>
zpracuj(pole);
</script>
</BODY></HTML>
Petroff
Profil
Stále zapomínám že naformátovaný text zprávy je komolen vynecháním někt.znaků ( \, whiteSPACE) s příp.interpretací navíc (\n,\t)
- a to asi není všechno.....ale mně se líbí přehledně vyhlížející text (a u kódu pochopitelně NEPROPORC.písmo - ale zdejší tag <PRE> má skoro dvojnásobné řádkování => nepoužitelné)

Posílám: fantastickou finální funkci fofrem formátovanou

String.prototype.margin=function(p){return "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".slice(6 *p)};
String.prototype.format=function(n,m){return this.margin(this.length-n+10) + this + this.margin(-m)};

function prevzit(o) {
document.write( "ID = " , String(o.ID).format(5,6) );
document.write( "nazev = " , o.nazev );
document.write( "<HR>" )
}

function zpracuj(pip) {
var i, j, k, pi, p;
for ( i = 1 ; i < pip.length; i++) for ( j in pi=pip[i] ) for ( k = 1 ; k < pi[j].length ; k++) prevzit( pi[j][k] )
}

====================================================================== ===============
Mám prosbu:
Vyrobený formátovač string.format(pred,po) mi nefunguje v případě, že počet mezer za koncem řetězce po
má být nulový:
String(o.ID).format(5,1) ........OK. 1 mezera
String(o.ID).format(5,0) ........KO. 0 mezer
Co s tím?
Toto téma je uzamčeno. Odpověď nelze zaslat.