Autor | Zpráva | ||
---|---|---|---|
Honza_n Profil * |
#1 · Zasláno: 20. 7. 2010, 09:58:46
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 |
#2 · Zasláno: 20. 7. 2010, 10:06:47 · Upravil/a: __construct
//edit: Omyl - zle som to pochopil :-(
|
||
Honza_n Profil * |
#3 · Zasláno: 20. 7. 2010, 10:14:12
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 |
#4 · Zasláno: 20. 7. 2010, 10:40:09
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 * |
#5 · Zasláno: 20. 7. 2010, 10:51:50
__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 |
#6 · Zasláno: 20. 7. 2010, 11:04:38
Reaguji na Honzu_n:
V čem je problém? Pokud nejsou některé indexy definované, tak jsou samozřejmě undefinované :-) |
||
Honza_n Profil * |
#7 · Zasláno: 20. 7. 2010, 11:26:29
takže tam musím jen dosadit podmínku pro vynechání cyklu, pokud je vlastnost nedefinovaná
|
||
__construct Profil |
#8 · Zasláno: 20. 7. 2010, 11:36:34
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 * |
#9 · Zasláno: 20. 7. 2010, 11:48:14
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 * |
#10 · Zasláno: 20. 7. 2010, 12:14:53
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 |
#11 · Zasláno: 20. 7. 2010, 12:41:11
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 * |
#12 · Zasláno: 20. 7. 2010, 17:26:44
__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 |
#13 · Zasláno: 20. 7. 2010, 18:40:44
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 * |
#14 · Zasláno: 20. 7. 2010, 18:42:30
Hele, už to neřeš (nebo teprv), už jsem tě pochopil.
|
||
Honza_n Profil * |
#15 · Zasláno: 20. 7. 2010, 18:53:26
Aichi:
OK tak sestavím objekt |
||
Časová prodleva: 14 let
|
0