środa, 11 maja 2011

Obsługa tablic asocjacyjnych w JS

Przeglądanie tablicy asocjacyjnej w JS może sprawić pewne kłopoty. Nie działa właściwość length, więc nie da się zastosować zwykłej pętli for. Natomiast przeglądanie za pomocą konstrukcji typu for(n in a), oprócz właściwych pozycji tablicy, zwraca również inne właściwości obiektu klasy Array.
Przykład:

var a = [];
a["a"] = "A";
a["b"] = "B";
a["c"] = "C";
for(n in a){
    console.log('a("' + n + '") = ' + a[n]);
}
W wyniku wykonania powyższego kodu, na konsoli (w Firebugu) ujrzymy mniej więcej takie coś:

a("a") = A
a("b") = B
a("c") = C
a("contains") = function (v) {
    if (v == null) {
        return false;
    }
    for (var i = 0; i < this.length; i++) {
        if (this[i] == v) {
            return true;
        }
    }
    return false;
}
Widać, że oprócz wartości wpisanych do tablicy, przetwarzana jest również właściwość "contains", która jest wewnętrzną właściwością obiektu klasy Array.
Cóż robić więc?
No więc jeśli mamy do czynienia z tablicą asocjacyjną, wystarczy zadeklarować ją w następujący sposób:

var a = {};

Uruchomienie powyższego przykładu z wprowadzoną taką zmianą, spowoduje wyświetlenie już tylko tych wartości, o które nam chodzi.

Brak komentarzy:

Prześlij komentarz