Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> for(x in arr), Tablica asocjacyjna w JS
batman
post
Post #1





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Witam

Mam problem z tablicą asocjacyjną. Tablica ta ma następującą strukturę:

Kod
arr = new Array();
arr["pole1"] = "string";
arr["pole2"] = "string_2";


Wcześniej przy pomocy prototype zdefiniowałem dodatkowe funkcje dla obiektu Array. Pierwsza to find, a druga to remove.

Problem pojawia się w momencie, gdy próbuję uzyskać dostęp do elementów tablicy przy pomocy For...In.

Kod
for(xx in arr) {
    alert(xx);
}


Pętla ta dołącza do tablicy arr zdefinowane przeze mnie funkcje i zamiast wyświetlić dwa alerty ("string" i "string_2"), wyświetla cztery ("find", "remove", "string" i "string_2").

Co jest tego przyczyną i w jaki sposób można temu zaradzić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
siemakuba
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

Ostrzeżenie: (0%)
-----


Cytat
Mniejsza z nazewnictwem
Problemem jest to, że w petli For...In oprócz elementów tablicy wyświetlane są również zdefiniowane przeze mnie funkcje.
Proszę, czytaj ze zrozumieniem. Nie o nazewnictwo tu chodzi, ale o to co tam wytworzyłeś. I nawet gdyby nazwywało się tak jak sobie zarzyczysz, będzie ciągle nie tym co chcesz osiągnąć.

Napisałem przecież, że nie dodałeś żadnego elementu do tablicy. Nadałeś tablicy nowe właściwości. Nie tablicy jako takiej, ale obiektowi arr.

W JS wszystko jest obiektem, więc twój obiekt arr reprezentuje tablicę. Ta tablica jest jednak pusta, bo nie dałeś jej żadnych wartości. Dziwisz się się, że obok właściwości pole1 i pole2 widzisz też nazwy metod. Tak, widzisz je, bo zarówno jedne jak i drugie są właściwościami obiektu arr.

Prosty test - alert(arr.length); - i co? zero? widzisz, jednak nie ma wartości.

Jeszcze raz - albo będziesz miał tablicę, albo będziesz miał obiekt. Jak chcesz coś na kształt tablicy asocjacyjnej - zbuduj obiekt i nadaj mu właściwości jak to robisz teraz.

Jak już bardzo chcesz mieć to w ten sposób i upierać się że to jest tablica asocjacyjna, ale nie chcesz widzieć swoich metod obok właściwości, zrób tak:
Kod
for(xx in arr)
{
    if (typeof(arr[xx]) == 'function')
    {    continue;
    }
   alert(xx);
}


P.S. przeczytaj jeszcze raz co napisałem, ze zrozumieniem tym razem :)

pozdr.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 11:35