Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Iteracyjny dostep do elementow obiektu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
tzm
Jak w temacie..
Jak sie dostac do elementow obiektu nie po indeksie slownym, a numerycznym?
czyt.
nie tak: result['all']['mitorski']
a tak: result['all'][0]

? Koniecznie tutaj musze pisac metode obiecttoarray?
nospor
A czemu i takie kombinacje? Może źle podchodzisz do problemu, ktory masz.
tzm
W result['all'] dostaje wszystkich graczy na gieldzie, i chce ich dodac do listy na ekranie... i najlepszy do tego jest for bo sprawdzam przy okazji na biezaco czy doszli nowi gracze czy tez nie. No ale ku mojemu zdziwieniu nie da sie forem przeleciec obiektu i gdzies wyczytalem o map i zmienianiu tego na tablice ale to tez chyba nie najlepsze bo indeks literowy jest zmieniany na liczbowy a to nick gracza w tym momencie. No i nie wiem...
pedro84
A pokaż przykładowy element tablicy, ok?
tzm
http://zapodaj.net/58fb96d800e71.png.html

to mi wypluwa result['all']
PrinceOfPersia
jesli masz tablicę, mozesz przeleciec przez nia tak:
Kod
zmienna.forEach(function(value) {
// value zawiera wartosc elementu
});

czyli dajesz callbacka.

Pytanie tykko co ty tam masz? Pokaz caly kod. Czy faktycznie jest to tablica, a nie zwykly obiekt (nie kazdy obiekt jest tablica).

edit:
o ktorym for mowisz? Jest For jak w C:
Kod
for (var i = 0; i < zmienna.length; i++) {...}

i om jest raczej do tablic. Masz tez for (var klucz in zmienna), tym przelatujesz generalnie obiekty po kluczach.

W nowej wersji Js ma byc jezzcze cos takiego jak for...of
tzm
Generalnie... to obiekt. Nie tablica facepalmxd.gif

A probowalem to zrobic tak:
[JAVASCRIPT] pobierz, plaintext
  1. for(var i = 0; i<result['all'].length;i++){
  2. console.log(result['all'][i]);
  3. }
[JAVASCRIPT] pobierz, plaintext


No ale ciagle dostaje undefined
nospor
FORem mozna bez problemu leciec po obiekcie....

Kod
for(var i in result['all']) {
alert('klucz: '+i +" wartosc: "+result['all'][i]);
}

Dlatego zawsze od razu pisz jaki masz problem, a nie pytasz o rozwiązanie, ktore ci sie wydaje...
tzm
Nie znajoma mi konstrukcja i in something... mniejsza o to.
A jak teraz jeszcze wyciagnac nick gracza skoro indeks po ktorym lecimy to nazwa?
nospor
No napisalem przeciez, że I to klucz/indeks czyli Twoj nick.
tzm
Ok, troche nie bardzo juz z mysleniem po 12 godzinach programowania... dzieki nospor.

[JAVASCRIPT] pobierz, plaintext
  1. var stockResources = { ts: [], food: [], lumber: [], stone: [], steel: [], inc: 0 };
  2. this.stock = function(currentGameStock){
  3. $('.update').html('Ostatnia aktualizacja: '+game.time(currentGameStock[0]));
  4. stockResources['inc']++;
  5. for( var i in stockResources ){
  6. stockResources[i].push([stockResources['inc'], currentGameStock[i]]);
  7. }
  8. }
[JAVASCRIPT] pobierz, plaintext


A co powiedzie na to?
Konsola zwraca:
Uncaught TypeError: undefined is not a function
W linii gdzie jest push...
Sugestie? Potrzebuje przygotować obiekt który potem przekaże do rysowania wykresów giełdowych. A może... @nospor, źle podchodzę do problemu?
Pyton_000
Zobacz przed for co masz w stockResources.
nospor
Cytat
A może... @nospor, źle podchodzę do problemu?

Na pewno nie czytasz komunikatow bledow. Wyraznie masz napisane: undefined is not a function
czyli gdzies w ktoryms momencie dostajesz undefined. Sprawdz kiedy, zrob IFa i nie lataj z takimi problemikami po forum. Zdaje się inspirujesz na programiste a nie na cos innego wink.gif
tzm
@nospor Błąd dotyczy pusha smile.gif Szukam informacji o alternatywach pushowania tablic w obiektach, jak słusznie zauważyłeś, programista.
@Pyton_000 Object {ts: Array[45], food: Array[45], lumber: Array[45], stone: Array[45], steel: Array[45]…} także spoko.
nospor
Ja wiem, czego dotyczy blad. Poraz kolejnu ci pisze, sprawdz na czym operujesz. I to nie przez console.log na calym obiekcie, tylko przez alert na kazdym elemencie z osobna...
tzm
[JAVASCRIPT] pobierz, plaintext
  1. var stockResources = {food: [], lumber: [], stone: [], steel: []};
  2. var gameLoop = 0;
  3. this.stock = function(currentGameStock){
  4. $('.update').html('Ostatnia aktualizacja: '+game.time(currentGameStock[0]));
  5. gameLoop++;
  6. var item = 1;
  7. for( var name in stockResources ){
  8. stockResources[name].push([gameLoop, currentGameStock[item++]]);
  9. $.plot("#"+name, [{data:stockResources[name], color:"#33CCCC"}]);
  10. }
  11. }
[JAVASCRIPT] pobierz, plaintext


No i tak działa.
stockResources był obiektem literałowym,
currentGameStock tablicą iteracyjną.
nospor
Nie ogarniam.... Mowilem ci zebys sprawdzil co masz to bys widzial. Zamiast tego pokazujesz mi cos, co dziala....

currentGameStock[item++] tutaj indeksami masz liczby 1,2,3,4,5
currentGameStock[i] tutaj indeksami masz teksty: ts, food,.....
Naprawde nie widzisz roznicy?
tzm
nospor, powiedziałem że rozwiązałem problem i napisałem dokładnie to samo co Ty.

zjedz snickersa.
nospor
Zrozumialem, ze pokazujesz mi kod, ktory dzialal, a chciales zrobic inaczej. Wiec wytlumaczylem ci roznice. tongue.gif

Dlatego poraz kolejny cię proszę: zanim polecisz na forum, sprawdz co zawierają rzeczy, na ktorych pracujesz. Tak robią programiści a ty zdaje się chcesz być jednym z nich wink.gif
tzm
Z 3 miesięcznym doświadczeniem w tym języku nie przeszło mi nawet przez myśl sprawdzanie co jest pod którą zmienną, tutaj mi pomogłeś, dlatego jeszcze o sobie nie mówię programista;)
No a jak nie zrozumiałeś to spoko, lecimy dalej.
nospor
Cytat
Z 3 miesięcznym doświadczeniem w tym języku nie przeszło mi nawet przez myśl sprawdzanie co jest pod którą zmienną

Nie wierze, ze nie widziales jeszcze tego linku
Temat: Jak poprawnie zada pytanie
Porady tam podane dotyczą każdego języka
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.