Autor Zpráva
tomas.kimi
Profil *
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 *
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
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
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
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
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
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 *
Díky za četné rekace. Je mi to již o mnoho jasnější.

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