2015-08-13 9 views
5

Mam obiekt tak:Jak sprawdzić, czy jesteś na ostatnim przejściu pętli for through?

var obj = { thing_1 : false, 
      thing_2 : false, 
      thing_3 : true, 
      thing_4 : false, 
      thing_5 : true 
      } 

Jestem teraz przelotowego tego obiektu i szukając kluczy obiektowych, które są prawdziwe, tak jak poniżej:

for (value in obj){ 
    if (obj[value] === true){ 
     // do something 
    } 
    } 

Skąd mam wiedzieć, kiedy mam osiągnął ostatnią pętlę, w której jeden z kluczy jest prawdziwy?

+0

Dlaczego chcesz wiedzieć, jakiś konkretny powód tego –

+0

@VivekGupta popularnym zastosowaniem przypadek: String konkatenacji, ale nie dołączając do ostatniej wartości – CodingIntrigue

+0

@VivekGupta Powodem jest to robie asynchronicznego połączenia na każdym przejściu pętli, a więc chcę wiedzieć, kiedy ostatnie wywołanie asynchroniczne jest rzeczywiście zakończone. – Squrler

Odpowiedz

2

Można count się object elementy z Object.keys(obj).length, a następnie sprawdza wewnątrz pętli znaleźć podczas pracy z ostatniego.

Sposób Object.keys(obj) zwraca tablicę własnych właściwości przeliczalnych danego obiektu, w takiej samej kolejności jak te dostarczane przez FOR ... w pętlę (przy różnicą, że do w pętli wymienia właściwości w również łańcuch prototypów).

Przykład:

var obj = { 
    thing_1: false, 
    thing_2: false, 
    thing_3: true, 
    thing_4: false, 
    thing_5: true 
}; 

var count = 0; 
for (var value in obj) { 

    count++; 

    if (count == Object.keys(obj).length) { 
    console.log('And the last one is:'); 
    } 

    console.log(obj[value]); 

} 

Uwaga: Jak można sobie wyobrazić, to ma pewne problemy z IE < 9 ...
można zrobić własną funkcję niestandardową lub iść do przodu z polifill .. .
Przeczytaj więcej na ten temat in this related question.

Powiązane problemy