Javascript 地图排序

新手上路,请多包涵

我最近在我的代码中遇到了一个错误,这是由于我在 MDN 上查看 Map 对象详细信息时遗漏了“ in insertion order ”文本。简而言之,我有一个地图对象,可以说

let myMap = new Map;

然后,在填充它之后,我用一个简单的 for .. of 语句遍历它的内容。像这样

for (let [key, val] of myMap) {
    ...
}

for 循环中的代码取决于要按 key 排序的 (key, value) 对。然而,填充地图的算法以随机顺序执行(我无法更改)。为了解决这个问题,我现在首先将所有可能的键添加到地图对象中,如下所示:

 let myMap = new Map;
for (let i=0; i<maxkey; ++i) myMap.set(key(i), undefined);

// And in the for loop
for (let [key, val] of myMap) {
    if (typeof val === "undefined") continue;
    //...
}

幸运的是,它们并不多(因此性能损失可以忽略不计),这很有效。这个解决方案对我来说仍然有点尴尬。

有更好的东西吗?

原文由 Pavel Beliy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 233
1 个回答

映射中键的顺序取决于映射实现。具有自然排序键的映射通常称为 _树映射_,因为键存储在 中。我没有在 JS 中使用树图,所以我不能推荐特定的实现。

原文由 StackOverthrow 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏