[JS] Iteracja po obiekcie pobranym jako JSON.

0

Witam, pewnie banał, ale już nie mogę.
Dostaje taki JSON:

{"0":{"id":14,"title":"Strona 10"},"1":{"id":138,"title":"Strona 14"},"2":{"id":141,"title":"Strona 17"},"3":{"id":145,"title":"Strona 100"},"4":{"id":149,"title":"Strona 104"},"5":{"id":150,"title":"Strona 105"},"6":{"id":151,"title":"Strona 106"},"7":{"id":152,"title":"Strona 107"},"8":{"id":153,"title":"Strona 108"},"9":{"id":158,"title":"Strona 113"}

Próbuje wyświetlić jakieś pola:

        for(var page in pages) {
            console.log(page.title, 'page');
            if(page.hasOwnProperty('title')) {

            }
        }

I otrzymuje zawsze undefined, a jak wyświetlam samo page to otrzymuje tylko indeks, o co chodzi?

0

JSON-a nie mam zamiaru analizować dopóki go jakoś nie sformatujesz ;). Sorry!

Wygląda jednak na to, że nie ogarniasz składni pętli for-in. To jest tak:

for (var key in map) {
...
}

A nie:

// TO NIE TAK!!!
for (var value in map) {
...
}

Pod zmienną, którą deklarujesz w for-in NIE są podstawiane poszczególne wartości z mapy. Tylko KLUCZE tych wartości. Dlatego tę zmienną nazwałem w pierwszym (dobrym!) przykładzie "key". Żeby dostać się do kolejnej wartości z mapy, musisz użyć map[key].

Czyli jeśli chciałbyś wyświetlić po kolei wartości z mapy w alertach, to musisz zrobić tak:

for (var key in map) {
  alert('Pod kluczem ' + key + ' mamy ' + map[key]);
}

Obicie sobie d**y blachą za pomocą hasOwnProperty jest nader wskazane, ale robi się to tak:

for (var key in map) {
  if (map.hasOwnProperty(key)) {
    alert('Pod kluczem ' + key + ' mamy wartość: ' + map[key]);
  }
}

Może samo to rozjaśni Ci sytuację na tyle, że dasz sobie radę :).

0

Dzięki:)

Ale ze mnie ciapa, widać też, że powinienem iść już spać (:

Pozdro

1 użytkowników online, w tym zalogowanych: 0, gości: 1