如何按十进制键值对JavaScript Map进行自然排序?
优雅实现Map中数字字符串键的自然排序
当Map的键为数字时,JavaScript会自动将其转为字符串类型,直接使用[...myMap.entries()].sort()会按字典序排序,导致1、11、12…2、20…的混乱顺序。不用给键补零,直接在排序回调中做数值转换就能解决:
代码示例
首先创建包含1-31日的Map:
const myMap = new Map(); for (let i = 1; i <= 31; i++) { myMap.set(i, `Day ${i}`); }
实现自然排序:
// 升序排序 const sortedAscMap = new Map( [...myMap.entries()].sort(([keyA], [keyB]) => Number(keyA) - Number(keyB)) ); // 若需要降序,只需调换顺序 const sortedDescMap = new Map( [...myMap.entries()].sort(([keyA], [keyB]) => Number(keyB) - Number(keyA)) );
原理说明
- 解构
entries数组中的每一项,直接获取键keyA和keyB - 用
Number()将字符串类型的键转为数字,通过数值减法实现自然排序(正数则后者在前,负数则前者在前,零则顺序不变) - 这种方式无需修改原Map的键格式,排序逻辑清晰直接,比补零的写法更简洁优雅
内容的提问来源于stack exchange,提问作者Supersuslik
相关产品推荐
相关产品推荐

