2016-02-04 14 views
7

W jaki sposób przeprowadzasz iterację po zbiorze w TypeScript? for..of nie działa:Jak wykonać iterację w zestawie w TypeScript?

'Set<string>' is not an array type or a string type 

.forEach jest nie do przyjęcia, ponieważ ukrywa this. Wolałbym nie robić pętli while w bloku catch catch. czego mi brakuje? Nie może być tak niezdarne, aby wymagać try {while} catch {}.

Odpowiedz

15

@SnareChops był głównie poprawne:

mySet.forEach(function(item){ 
    // do something with "this" 
}, **this**); 

To działa.

Zgaduję:

for(item of mySet.values()){ 
} 

będzie działać, jeśli nie działa z ES-podkładka rzeczy, która jest aprowizacji wszystko dla mnie. Ale rzeczy podkładka jest przepisywany przez kątowe 2 załogi tak _ (ツ) _/¯

Jedyną rzeczą, która pracowała była:

for (var item of Arrays.from(set.values())) { 
} 

czy coś takiego, co jest po prostu straszne.

+4

Array.from? Wydaje się, że tablice nie działają – vinntec

2

Można nadal używać .forEach z prawidłowym this za pomocą zwykłej funkcji zamiast funkcję strzałki

mySet.forEach(function(item){ 
    expect(this).toEqual(item); 
}); 

W porównaniu do

class MyClass{ 
    ... 
    doSomething():{ 
     mySet.forEach((item) => { 
      expect(this instanceof MyClass).toEqual(true); 
     }); 
    } 
} 

Innym sposobem iteracyjne jest użycie pętli for over wartości:

Więcej informacji na iteracji Set z foreach można znaleźć here

+0

Doceniam szybką odpowiedź, ale znalazłem następujące być prawdą: Sposób 1: „to” nie jest zachowana, i myślę, że byłoby to Lambda normalnie są te, w celu zachowania „to” Podejście 2: To mnie nie kompiluje. Jedynym sposobem znalazłem, który działa tak daleko na bok od „a” podejście było: for (var klucz z Array.from (this.keys.values ​​())) i to daleko od pożądane, ponieważ Myślę, że tworzy on nową tablicę, a Array.from nie jest w pełni obsługiwany wszędzie. – user1019182

+0

Podążanie __ za prawdą? – SnareChops

1

Ten pracował dla mnie:

this.mySet.forEach((value: string, key: string) => { 
    console.log(key); 
    console.log(value); 
}); 

znalazłem go tutaj: Other Stack Overflow question

0

Rozszerzanie odpowiedź najbardziej upvoted, jest również typu bezpieczny jeśli używamy let zmiennej iteracji, więc:

for (let elem of setOfElems) { 
    ... do anything with elem... 
} 

Zagwarantuje to, że będzie miał elem typu X, jeśli setOfElems został uznany jako Set<X>.

Powiązane problemy