Autor Zpráva
Honza_n
Profil *
Ahoj,
snažím se sestavit funkci, která má vytvořit vícerozměrné pole.

Mám však problém s tím, že ve výsledném poli se zobrazuje spousta "hodnot"
"undefinated"


function hodnotKoncovky(){
var id, p;
h = [];
for ( id in vzory_[1])
{
h[id] = []; // vytvoření pole
}
console.log(h);
}



Struktura objektu vzory_[1] je takováto:

{
"1": ["p", "án", "ána", "ánovi,u", "ána", "ane", "ánovi,u",
"ánem"],
"2": ["člově", "k", "ka", "kovi", "ka", "če", "ku", "kem"],
"3": ["host", "", "a", "u,ovi", "a", "e", "u,ovi", "em"],
"10": ["teolo", "g", "ga", "govi", "ga", "gu", "govi",
"gem"],
"11": ["syn", "ek", "ka", "kovi", "ka", "ku", "kovi", "kem"]
}




Toto mi ukazuje konzola FF:
[undefined, [], [], [], undefined, undefined, undefined, undefined, undefined,
undefined, [], [], [], undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, [], [], [], [], [],
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, [], [], [], undefined, undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, [], [], undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, [], [], [], undefined, undefined,
undefined, undefined, undefined, undefined, undefined, [], [], [], [],
undefined, undefined, undefined, undefined, undefined, undefined, undefined, [],
[], undefined, undefined, undefined, undefined, undefined, undefined, undefined,
[], [], [], [], [], undefined, undefined, undefined, undefined, undefined, [],
undefined, undefined, undefined, undefined, undefined, undefined, undefined,
undefined, undefined, [], undefined, undefined, undefined, undefined, undefined,
undefined, undefined, undefined, undefined, [], [], undefined, undefined,
undefined, undefined, undefined, undefined, undefined, undefined, []]

Proč se mi všude zobrazuje to "undefined" a jak to správně ošetřit aby to tam
nebylo?
__construct
Profil
//edit: Omyl - zle som to pochopil :-(
Honza_n
Profil *
OPRAVA - zkus to takhle:

vzory = 
{
"1": ["p", "án", "ána", "ánovi,u", "ána", "ane", "ánovi,u",
"ánem"],
"2": ["člově", "k", "ka", "kovi", "ka", "če", "ku", "kem"],
"3": ["host", "", "a", "u,ovi", "a", "e", "u,ovi", "em"],
"10": ["teolo", "g", "ga", "govi", "ga", "gu", "govi",
"gem"],
"11": ["syn", "ek", "ka", "kovi", "ka", "ku", "kovi", "kem"]
};
function hodnot(){
var id, p;
h = [];
for ( id in vzory)
{
h[id] = []; // vytvoření pole
}
console.log(h);
}

hodnot();
__construct
Profil
Mám taký dojem, že to undefined budeš mať všade tam kde Ti chýba index. Máš nejaký rozumný dôvod na vynechávanie niektorých číslic ako indexov?
Honza_n
Profil *
__construct:
for ( id in vzory_[1])
h[id] = [];


Ten cyklus for prochází všechny existující prvky pole - nemůže procházet neexistující prvky pole. Id je definované vždy. Ta situace co myslíš ty by vznikla, kdyby to mělo podobu for (id=0; id<1000; id++); pak by to dosazovalo neexistující indexy.

Odpoveď na tvou otázku. Ano. Pořadí vzorů je přesně dané a jsou mezi nimi mezery, aby v budoucnu bylo možné ještě přidat vzory, kdyby taková situace nastala.
Chamurappi
Profil
Reaguji na Honzu_n:
V čem je problém? Pokud nejsou některé indexy definované, tak jsou samozřejmě undefinované :-)
Honza_n
Profil *
takže tam musím jen dosadit podmínku pro vynechání cyklu, pokud je vlastnost nedefinovaná
__construct
Profil
Honza_n:
Ani to Ti nepomôže. Pochop že pole má indexy od 0 po x - pokiaľ niektorý nepoužiješ znamená to, že je undefined, takže tá podmienka nemá zmysel
Honza_n
Profil *
No nechápu to. Když napíšu
 if (id == null ) continue;
 if (id == 'undefined' ) continue;
 if (id>0) h[id] = [];

tak přece id by měl být buď null nebo 'undefined' a tudíž by se neměl cyklus provést. Třetí řádek už vůbec ne, protože id není větší než nula. Tak co nechápu? Co dělám špatně?
Honza_n
Profil *
Vždyť když dávám
cosol.log(id) tak mi to píše

1
2
3
10
11

tak to vůbec nedává smysl, jak by
h[id] = [];
mohlo vracet undefinated.
__construct
Profil
Honza_n:
Najprv by si mal pochopiť čo to vlastne pole je:
K jednotlivým prvkům pole se přistupuje pomocí jejich indexu (celého čísla, označujícího pořadí prvku)
Tým, že Ty niektoré indexy vynecháš nevytvoríš pole ktoré tie indexy mať nebude - ono ich má, ale nie sú definované.
Skús si vypísať h.length.
Na Tvojom mieste by som použil iný spôsob - napr.:
vzory = {
0:{
id: "1",
polozky:["p", "án", "ána", "ánovi,u", "ána", "ane", "ánovi,u","ánem"]
},
1:{
id: "2",
polozky:["člově", "k", "ka", "kovi", "ka", "če", "ku", "kem"]
},
2:{
id:"3",
polozky:["host", "", "a", "u,ovi", "a", "e", "u,ovi", "em"]
}
};
Honza_n
Profil *
__construct:
Tým, že Ty niektoré indexy vynecháš nevytvoríš pole ktoré tie indexy mať nebude - ono ich má, ale nie sú definované.

To jsem pochopil z tvého předchozího příspěvku. Ale mám pocit, jak kdyby si mi neodpověděl na otázku, nebo z tvé odpovědi nevyplývá (není mi jasné) proč nefungují ty tři podmínky, které jsem uvedl v 11:48:14

Chápu, že se v cyklu zpracovává všech 12 vzorů - ale proč nedokážu (pomocí těch podmínek) rozpoznat kdy je id nastaveno, a kdy není nastaveno?

To že uvádíš jiné řešení je sice pěkné, ale skutečně je to jediné řešení? Vzhledem k tomu, že už mám očíslovaný celý objekt, který obsahuje asi 200 položek nebo víc, tak by to byla dost práce. Navíc bych musel znova předělat funkce, které s tímto objektem pracují, a to by znamenalo strávit týden navíc něčím, o čem nejsem zcela přesvědčen, že je to jediná možnost. Takže teď je pro mě nejdůležitější nějak pochopit proč nefungují ty moje podmínky.
Aichi
Profil
Honza_n:
Očividně jsi to nepochopil. Ty tvoje podmínky jsou v tom FOR-IN cyklu na prd, protože, žádný id není null nebo undefined. Ty jen děláš řídké pole a nastavuješ hodnotu pro klíč 1,2,3,10,11. Takže ostatní klíče které do 11ti chybí jsou undefined, protože jsi je nenastavil.

Takže buď se smíříš s tím, že generované pole bude mít hodnoty undefined a při jeho zpracování s tím budeš počítat, nebo si jinak zvolíš data. Ono brát ve FOR-IN jako název vlastnosti "1" a pak jí použít jako klíč do pole, tudíž nechávat to přetypovat na číslo 1 je trochu prasárna.
Honza_n
Profil *
Hele, už to neřeš (nebo teprv), už jsem tě pochopil.
Honza_n
Profil *
Aichi:
OK tak sestavím objekt

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:

Prosím používejte diakritiku a interpunkci.

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

0