Mam trochę prostego zapętlenia JavaScript przez szereg przedmiotów (grupy użytkowników Tridion), aby sprawdzić, czy użytkownik jest członkiem określonej grupy.

Mogę łatwo kodować wokół problemu pokazanego poniżej (patrz {x0}}), ale chcę zrozumieć, dlaczego isArray = {x2}} jest liczona jako wartość w tablicy - jakieś pomysły?

Poniższy zrzut ekranu pokazuje, że wartość extensionGroups została ustawiona

var extensionGroups = ["NotEvenARealGroup", "Author", "ExampleGroupAfterOneUserIsActuallyIn"]; 

Ale zwraca wartość isArray jako czwarta wartość?

Zaktualizowano, aby pokazać obrazy trochę wyraźniejszy

Firebug - objects

Firebug - code

4
Dylan .. Mark Saunders 24 sierpień 2012, 17:51

2 odpowiedzi

Najlepsza odpowiedź

Używasz for in, aby iterować tablicę; Nie rób tego. Użyj for (lub forEach):

for(var i = 0; i < extensionGroups.length; i++) {
    var extensionGroup = extensionGroups[i];
    // ...
}

Powodem tego zawiedzie jest dlatego, że for in jest używany do iteracji na właściwości obiektu w JavaScript. ITeresting nad tablicą w ten sposób oznacza, że dostaniesz coś innego przypisanego do niego, takie jak ta właściwość lub {x1}}.

A jeśli jesteś w stanie użyć Array#forEach, to prawdopodobnie najbardziej odpowiedni:

extensionGroups.forEach(function(extensionGroup) {
    // ...
});
7
Ry- 24 sierpień 2012, 13:55

For..in, technicznie mówiący, nie iteruje za wartości. Iteruje przez nazwy właściwości. W tablicy wartości są właściwościami pod maską. Więc kiedy jesteś przed nimi z for..in dostaniesz funky takie, jak się dzieje.

Co podkreśla mój następny punkt: nie używaj for..in . Nie używaj go do tablic - nie używaj tego naprawdę. OK - może to trochę za daleko. Co powiesz na to: Jeśli czujesz potrzebę użycia for..in, Trudno, aby zobaczyć, czy jest to uzasadnione, zanim to zrobisz.

1
Phillip Schmidt 24 sierpień 2012, 14:21