如何按顺序遍历 ES6 Map?

时间:2021-01-27 11:02:20

标签: javascript es6-map

ES6 映射的默认迭代顺序是插入顺序。你如何以数字/字典顺序遍历它?

1 个答案:

答案 0 :(得分:1)

不幸的是,Javascript 中没有像更好的语言(例如 C++ 的 std::map,或 Rust 的 BTreeMap)那样的有序映射。有像 btree-typescript 这样的第三方(基准部分列出了一些其他实现)。

因此您可以使用按顺序存储的地图。如果您使用的是 ES6 Map,您要么必须按顺序插入值并且永远不要更改它们,要么必须将所有键收集到一个数组中,然后对它们进行排序。如果你在做一次,它实际上比使用 BTreeMap 更快(无论如何,在 Rust 中,我认为在 Javascript 中也是如此)。但通常情况下最好使用 B 树映射。

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);
}