【发布时间】:2018-04-27 19:19:52
【问题描述】:
我最近在我的代码中遇到了一个错误,这是由于我在查看 MDN 上的地图对象详细信息时缺少“按插入顺序”文本。简而言之,我有一个地图对象,可以说
let myMap = new Map;
然后,在填充它之后,我用一个简单的 for .. of 语句迭代它的内容。像这样
for (let [key, val] of myMap) {
...
}
for 循环中的代码依赖于 (key, value) 对,按 key 排序。但是,填充地图的算法是以随机顺序执行的(我无法更改)。为了解决这个问题,我现在首先将所有可能的键添加到地图对象中,如下所示:
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;
//...
}
幸运的是,它们并不多(因此性能损失可以忽略不计),这很有效。这个解决方案对我来说还是有点尴尬。
还有更好的吗?
【问题讨论】:
-
将其转换为数组并排序。
[...map].sort(([k1], [k2]) => k1.localeCompare(k2)) -
数组类型为 [{key: T, value: V}],然后是 arr.sort((a, b) => compare(a.key, b.key)) ?
-
我猜是的,这是一个选项
标签: javascript es6-map