【问题标题】:How do I iterate through an ES6 Map in order?如何按顺序遍历 ES6 Map?
【发布时间】:2021-01-27 11:02:20
【问题描述】:

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

【问题讨论】:

    标签: javascript es6-map


    【解决方案1】:

    不幸的是,Javascript 中没有像更好的语言那样的有序映射(例如 C++ 的 std::map 或 Rust 的 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-21
      • 2018-09-04
      • 2016-10-16
      • 1970-01-01
      • 2013-05-29
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多