Javascript map 排序

标签 javascript es6-map

我最近在代码中遇到了一个错误,这是由于我在 MDN 上查看 map 对象详细信息时缺少“按插入顺序”文本。简而言之,我有一个 map 对象,可以说

let myMap = new Map;

然后,在填充它之后,我使用简单的 for .. of 语句迭代其内容。像这样

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

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

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;
    //...
}

幸运的是,它们的数量并不多(因此性能损失可以忽略不计),而且这是有效的。不过这个解决方案对我来说看起来有点尴尬。

还有更好的吗?

最佳答案

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

关于Javascript map 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50069004/

相关文章:

javascript - meteor 显微镜激活光标

javascript - 在 es6 map 上调用 `Array.prototype.some()` 的更好方法

javascript - 设置或删除项目时如何查找 Map() 中的更改?

javascript - 如何在 JavaScript 中检查两个 map 是否具有相同的键集

javascript - 使用 ES6 中的 map 函数更新对象的属性值

javascript - 根据单选按钮选择自动更新 .php 变量的值,无需提交或刷新

javascript - jQuery Turnbox.JS - 无需用户交互的动画

javascript - 为什么我不能在 Canvas 上画一个正方形?

javascript - getDerivedStateFromProps 未在 React Native 中调用