2017-01-10 22 views
2

私はキーとしてIDを持つTypescriptマップを持ち、値としてブール値を持っています。私はマップを繰り返して、少なくとも1つが真であるかどうかを確認したい。私はそれがforEachで可能であることを知っているが、最初のものが見つかった後にループを終了したい。typescriptでマップを反復することができません

これは私が(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of#Iterating_over_a_Mapによる)コーディングです:

 private isOneSelected(): boolean { 
      for (let [key, value] of this.selectionMap) { 
       if (value) { 
        return true; 
       } 
      } 
      return false; 
     } 

しかし、それは全くのループに入っていません。 JSコンパイルされたファイルは次のようになります。

  SelectionController.prototype.isOneSelected = function() { 
      for (var _i = 0, _a = this.selectionMap; _i < _a.length; _i++) { 
       var _b = _a[_i], key = _b[0], value = _b[1]; 
       if (value) { 
        return true; 
       } 
      } 
      return false; 
      }; 

私はES6に対してコンパイルしていると私はES6-シムタイピングを使用しています: TSconfigのファイル:

[...] 
"compilerOptions": { 
    "sourceMap": true, 
    "rootDir": "./client", 
    "outDir": ".tmp/client", 
    "target": "ES6", 
    "module": "commonjs" 
}, 
[...] 

おかげで、

トビアス

+1

* TypeScript map *とはどういう意味ですか? 'Map'や' [[index:number]:number'のようなオブジェクト?そして、あなたはどんなエラーになりますか? – Yogu

+0

マップは次のようになります。selectionMap:Map ; これは問題です。私は何の誤りもありません。マップはループのために定義されておらず、私は入っていません(ただし、console.logやforループの外側にあるものは問題ありません)。 –

答えて

0

少なくとも1つが真であるかどうかを確認したい場合は

this.selectionMap.filter(i=>i.key == true).length >= 1 ; 
+0

はい、そうですが、地図全体を反復処理します。私はそれをforEachでも行うことができました。しかし、パフォーマンス上の理由から、最初の「真」の後でやりたい –

0

Mapは、lengthプロパティを持たないため、コンパイルされたバージョンは機能しません。 this.selectionMap.entries()を試すと、直接エントリのIterableが返されます。

関連する問題