通过 ES6 映射的默认迭代顺序是插入顺序。你如何以数字/字典顺序遍历它?
问问题
60 次
1 回答
1
不幸的是,Javascript 中没有像更好的语言(例如 C++'sstd::map
或 Rust's BTreeMap
)那样的有序映射。有像btree-typescript这样的第三方(基准部分列出了一些其他实现)。
因此,您可以使用已排序存储的地图。如果您使用的是 ES6 Map
,您要么必须按顺序插入值并且永远不要更改它们,要么必须将所有键收集到一个数组中然后对它们进行排序。如果你这样做一次它实际上比使用 BTreeMap 更快(无论如何在 Rust 中,我认为在 Javascript 中也是如此)。但通常使用 B-tree 映射可能会更好。
function sortedNumberKeys<V>(map: Map<number, V>): number[] {
return [...map.keys()].sort((a, b) => a - b);
}
function sortedStringKeys<V>(map: Map<string, V>): string[] {
return [...map.keys()].sort();
}
const m: Map<string, number> = new Map();
for (const key of sortedStringKeys(m)) {
const val = m.get(key);
}
于 2021-01-27T11:02:20.360 回答