使用打字稿迭代地图不起作用

时间:2017-01-10 07:38:14

标签: javascript typescript typescript-typings

我有一个Typescript Map,ID为键,布尔值为值。我想迭代地图并检查是否至少有一个是真的。我知道有可能使用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-shim类型: tsconfig文件:

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

谢谢,

托拜厄斯

2 个答案:

答案 0 :(得分:1)

Map没有length属性,这就是编译版本不起作用的原因。您可以尝试this.selectionMap.entries(),因为它会直接返回条目的Iterable

答案 1 :(得分:0)

如果您只想检查是否至少有一个是真的,可以使用

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