2017-01-10 75 views
2

我有一個使用ID作爲鍵和布爾值作爲值的Typescript地圖。我想迭代地圖並檢查是否至少有一個是真的。我知道forEach是可能的,但是我想在第一次找到後退出循環。使用打字稿對地圖進行迭代不起作用

這是我的(根據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

如果你只想檢查是否至少有一個是真的,你可以使用

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

是的,但這樣我遍歷整個地圖。我也可以用forEach來做到這一點。但出於性能原因,我想在第一個「真實」之後停止。 –

0

Map沒有length屬性,這就是爲什麼編譯版本不起作用。您可以嘗試this.selectionMap.entries(),因爲它直接返回條目的Iterable