![]() |
![]() |
![]()
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ć? |
|
|
![]() |
![]()
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 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ąć.Problemem jest to, że w petli For...In oprócz elementów tablicy wyświetlane są również zdefiniowane przeze mnie funkcje. 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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 11:35 |