Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Problem z obiektem
Forum PHP.pl > Forum > Przedszkole
Skie
Witam, mam pewien problem z obiektem, który powstaje przez użycie eval() na JSONie. Dla każdego usera tak on wygląda (kod):

Kod
"1":{"posx":"0","posy":"0"}


Jest to bardzo uproszczona wersja, ale wystarczy żeby wytłumaczyć o co mi chodzi. Mam takich userów kilku i po użyciu eval() stworzony obiekt zapisuje zalozmy do metody map.objUsers

czyli to powyższego usera tak mógłbym się odnieść: (id = 1)

Kod
map.objUsers[id].posx;
map.objUsers[id].posy;


i teraz mam taki problem - jak "wybrać" tego usera znając tylko jego posx i posy, a nie wiedząc nic o id?
Hazel
Może pętlą?

Przechodzisz pętlą przez wszystkie właściwości posx i posy i sprawdzasz, dla jakiego id są równe Twoim danym.
Skie
Ale co sprawdzę pętlą nie znając id? Najwyżej mogę takie coś zrobić:

Kod
for (i in map.objUsers) { }


a musiałbym coś w tym stylu, ale taki zapis raczej nie istnieje:

Kod
for (i in map.objUsers[]) { }


...A może chodzi Ci o to żeby za pocą pierwszej iteracji stworzyc dodatkowy obiekt z kluczem jako posx i posy a wartością jako id? Myślałem o tym, ale raczej nieoptymalne jest - po co mi 2 takie same niemal obiekty?
phpion
Zakładam, że na jednej pozycji może być tylko jeden user. W takim razie może lepiej stworzyć tablicę (ewentualnie jej kopię) w której klucz to np. x_y, a wartość to id ludka. Przykład:
tab[12_34] = 5;
Czyli ludek o id=5 znajduje się na pozycji x=12, y=34.
Skie
Tak, ale jedyny sposób na stworzenie takiej tablicy to iteracja obiektu objUsers i sprawdzanie po kolei każdego posx i posy, oraz ew. nadpisywaniu danych w tablicy. Obecnie takie rozwiązanie funkcjonuje u mnie, ale ono strasznie obciąża całość. Bez pętli tworzącej tą tablicę wszystko działa płynie na każdej przeglądarce, a wraz z nią to już lekko się tnie skrypt na FF.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.