Typescript-通过其值获取映射键



我有一个Map<string, boolean>。我想根据它们的值提取数组的键。我想得到两个字符串数组;一个是值为false的键,另一个是其值为true的键。

我试着这样过滤它们:

const trueKeys = [...myMap.entries()].filter(it => it[1] === true).map(it => it[0]);
const falseKeys = [...myMap.entries()].filter(it => it[1] === false).map(it => it[0]);

但它需要对每个数组的条目迭代两次。有更好的方法来实现这一点吗?

我不认为对映射的条目进行两次迭代与一次迭代是什么大不了的,因为我很难想象这样的情况,即更改会导致性能较差的代码和性能良好的代码之间的差异(比如逃离海啸;你要么离得太近,要么离得足够远,而运行几乎肯定不会改变这一点(。

不过,如果你只想遍历一次,你可以这样做:

const trueKeys: string[] = [];
const falseKeys: string[] = [];
myMap.forEach((v, k) => (v ? trueKeys : falseKeys).push(k));
console.log(trueKeys, falseKeys);

在这里,我只使用forEach()方法迭代Map一次。甚至[...myMap.entries()]在尝试过滤数组之前也会对数组进行一次迭代,所以我避免了这种情况,以确保我们只遍历一次。

在回调Ipush()中,每个键根据值分为两个数组中的一个。这会使输出数组发生变化,您可以重写以避免这样做,但几乎可以肯定的是,您会放弃所获得的适度性能。

游乐场链接到代码

最新更新