Autor | Zpráva | ||
---|---|---|---|
tomas.kimi Profil * |
#1 · Zasláno: 17. 7. 2007, 16:54:48
Potřeboval bych zjistit délku pole v JS (lépe řečeno ověřit, zda-li je prázdné úplně čí není). Problém ale nastává, když vytvořím prvek pole asociativně. Řekněme takto:
var pole = new Array(); pole['aa'] = 'qqq'; Při příkazu pole.length mi to vrací 0. Jde nějak zjistit, zda-li je pole prázdné nebo ne? Vymyslel jsem pouze tento způsob: for(prvek in pole) return true; return false; Otázka, zda-li neexistuje něco lepšího. |
||
los Profil * |
#2 · Zasláno: 17. 7. 2007, 17:09:39
pole.length vráti 0, pretože pole je prázdne.
Ak chceš počítať vlastnosti, ktoré pridáš a zároveň nechceš stále prechádzať celé pole, tak si ich počet musíš niekde udržiavať sám. |
||
Hooonza Profil |
#3 · Zasláno: 17. 7. 2007, 17:20:15
Mně teda
<html> <script> var pole = new Array(); pole['aa'] = 'qqq'; alert(pole['aa'].length); </script> vyhazuje "3". <html> <script> var pole = new Array(); pole[9] = 'qqq'; alert(pole.length); </script> vyhazuje "10". Asi 'aa' není číslo? |
||
DJ Miky Profil |
#4 · Zasláno: 17. 7. 2007, 17:22:59
alert(pole['aa'].length); - To je délka řetězce, ne délka pole.
pole.length by v tom případě vrátilo 0, protože pole.length vrací o 1 vyšší číslo, než je poslední číselný index. Možná by mohlo jít hned po přiřazení hodnoty: pole['aa'] = 'qqq'; Nastavit pole.length na 1 (nebo +1), pak už ji můžeš kontrolovat... var pole = new Array(); (...) pole['aa'] = 'qqq'; pole.length+=1; (...) alert(pole.length); // 1 |
||
Chamurappi Profil |
#5 · Zasláno: 17. 7. 2007, 19:10:39
Reaguji na tomase.kimi:
Asociativní pole v JS není pole (Array), ale objekt (Object). Metody a vlastnosti třídy Array na něm nejdou smysluplně využít, proto je zbytečné jej vytvářet jako new Array(). |
||
centi Profil |
#6 · Zasláno: 17. 7. 2007, 19:16:33
Vymyslel jsem pouze tento způsob:
for(prvek in pole) return true; return false; A pravdepodobne je to jediný možný. Javascript totiž nemá klasické asociatívne polia a pole['aa'] nemá nič spoločné s definovaným poľom var pole = new Array(); a je vlastne novou premennou. Asociatívne "polia" v javascripte sú totiž objekty (resp. hash mapy) a preto sa pri nich netvorí "length" a nedajú sa použiť ani ďalšie metódy určené pre polia. pole[9] = 'qqq'; vyhazuje "10". Na desiatu pozíciu (položky polí sa počítajú od 0) vkladáš string, to znamená, že pred ním je 9 prázdnych položiek. Dohromady je teda 10. |
||
peta Profil |
#7 · Zasláno: 18. 7. 2007, 08:08:54
tomas.kimi
viz LOS, priklad MIKY, jen misto pole.length bych zvysoval svou vlastni polozku (treba delka_pole), protoze pak je to dost matouci pro cykly for (i=0;i<pole.length;i++) mohlo by ti to take vratit posledni polozky undefined. resp takto: pole[0]=3 pole[4]=1 pole['a']=5 pole.length+=1; t = ''; for (i=0;i<pole.length;i++) {t+=' --- '+i+':'+pole[i];} alert(t); pro vypsani takoveho pole stejne musis pouzit cyklus for (i in pole) viz Chamurappi hned ten prvni odkaz u JS literatury http://www.volny.cz/peter.mlich/www.htm#msub8 - klikni na array a klikni na object Proste ta polozka zrusit nejde, alespon mne to neslo u jedne hry a udelal jsem si to jinak, pres pole kombinovane s objekty. |
||
tomas.kimi Profil * |
#8 · Zasláno: 19. 7. 2007, 01:31:04
Díky za četné rekace. Je mi to již o mnoho jasnější.
|
||
Časová prodleva: 17 let
|
0