2016-02-04 23 views
7

TypeScriptのセットをどのように反復処理しますか? for..ofは動作しません:それはthisを隠すためTypeScriptでSetを反復処理する方法は?

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

.forEachは、受け入れられません。 try catchブロックでwhileループを実行しないことをお勧めします。私は何が欠けていますか? try {while} catch {}を必要とするようには不自然なことはありません。あなたはまだ通常の関数の代わりに、反復処理する別の方法

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

と比較すると、矢印機能

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

を使用して、正しいthis.forEachを使用することができます

答えて

15

@SnareChopsを見つけることができますforeachでSetを反復にほとんどは正しかった:

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

これは動作します。

私は推測している:私は私のためにすべてをめちゃくちゃにされたES-シムのもので作業していなかった場合

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

が働くだろう。しかし、シムのものが_そうアンギュラ2乗組員によって規定されている(ツ)だっ働い_ /¯

唯一の他の事:

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

またはそのような何か、ちょうどひどいです。

+4

Array.from?配列は動作していないようです – vinntec

2

は終わっforループを使用することです値

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

詳細here

+0

私は迅速な対応に感謝が、私は次が真であることが判明しました: アプローチ1: を「これは」保存されていない、と私はそれが正常にラムダさんは「この」 を維持するものであることだと思います アプローチ2: これは私のためにコンパイルされません。 私が見つけた唯一の方法は、これまでの「while」アプローチを除いて、以下のとおりです。 for(Array.from(this.keys.values())のvarキー)の 私はそれが新しい配列を作成し、Array.fromがどこでも完全にサポートされていないと思う。 – user1019182

+0

以下は本当ですか? – SnareChops

1

これは私の仕事:

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

を、私はここでそれを見つけた:Other Stack Overflow question

0

は、最もupvoted答えを拡張し、それはまた、タイプセーフ我々は反復変数のためletを使用する場合、そうである:

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

これはsetOfElemsがとして宣言された場合elemは、タイプXを持っていることを保証します。

関連する問題