繁体   English   中英

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

[英]Iterating over map with typescript does not work

我有一个 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"
},
[...]

谢谢,

托比亚斯

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM