我有一张Map,钥匙=一个月中的一天,1
... 31
。如果我理解正确的话,JavaScript会将Map键转换为字符串。
使用标准new Map([...myMap.entries()].sort())
排序后,Map将按键排序为:
1, 11, 12, 13, ..., 19, 2, 20, 21, 22, 23, ... 29, 3, 30, 31.
字符串
我找到了一种方法,通过将十进制键转换为字符串并使用0
填充单个数字来排序为1,2,3,4,5, ...
:
mykey.toString().padStart(2, "0");
型
我怀疑这是太人为的,应该有一些预建在JavaScript的方法来实现正常排序的一个Map由一个十进制值的键。
有什么建议可以更好地按小数键对JavaScript map排序吗?
尝试了new Map([... myMap.entries()].sort())-Map被排序为:1、11、12、……、19、2、20、21、22、……二十九三三十三十一
1条答案
按热度按时间kgqe7b3p1#
虽然任何类型都可以在
Map()
对象的key
中使用,但在使用默认的sort()
实现时,它们被强制转换为字符串。要解决这个问题,您需要实现自己的排序逻辑,将它们显式地作为数值进行比较。在下面的示例中,它使用整数,但如果需要十进制比较,可以很容易地更新为使用
parseFloat()
。字符串
注意:代码片段控制台似乎不能很好地处理
Map()
对象-检查devtools控制台中的输出以查看排序是否正确。