Javascript 如何在ES6中对地图进行排序
我正在尝试使用下面的函数对地图进行排序Javascript 如何在ES6中对地图进行排序,javascript,Javascript,我正在尝试使用下面的函数对地图进行排序 var m=new Map(); m.set('0900','0910'); m.set('1100','1200'); m.set('1000','1030'); m.set('1235','1240'); var ma=new Map([...m.entries()].sort()); console.log(ma); 输出:{900=>9101000=>10301100=>12001235=>1240
var m=new Map();
m.set('0900','0910');
m.set('1100','1200');
m.set('1000','1030');
m.set('1235','1240');
var ma=new Map([...m.entries()].sort());
console.log(ma);
输出:{900=>9101000=>10301100=>12001235=>1240}
地图正在排序,但是当我使用整数而不是字符时,我无法对它进行排序
var m=new Map();
m.set(0900,0910);
m.set(1100,1200);
m.set(1000,1030);
m.set(1235,1240);
var ma=new Map([...m.entries()].sort());
console.log(ma)
输出:
{1000=>10301100=>12001235=>1240900=>910}
MDN关于:
entries()
方法返回一个新对象,该对象按插入顺序为映射中的每个元素包含[key,value]
对
调用条目时,它首先将键值对转换为字符串,然后再对它们进行排序。这意味着0900
变为900
,位于1235
之后,因为'9'>'1'
(每个字符串的第一个字符)
如果要按键对条目进行排序,则需要将自定义的compareFunction
参数传递到sort
,该参数处理键值对并将键作为数字进行比较:
var m=newmap();
m、 组(09000910);
m、 套(11001200);
m、 套(10001030);
m、 一套(12351240);
var ma=newmap([…m.entries()].sort((kv1,kv2)=>kv1[0]-kv2[0]);
控制台日志(ma)代码>在这里,通过从数组中解构来提取第一个元素,并对其进行比较。
var m=newmap();
m、 组(09000910);
m、 套(11001200);
m、 套(10001030);
m、 一套(12351240);
var ma=newmap([…m.entries()].sort(([a],[b])=>a-b));
for(马常数){
控制台日志(e);
}
sort()
函数,当您不提供compareFunction作为参数时,它的工作方式与您本能期望的工作方式不同。请参阅以下相关文件的引用:
如果未提供compareFunction,则所有未定义的数组元素
通过将它们转换为字符串并在
UTF-16代码单位订单。例如,“香蕉”在“樱桃”之前。
在数字排序中,9在80之前,但因为数字是
转换为字符串后,按Unicode顺序,“80”排在“9”之前。All
未定义的元素排序到数组的末尾
引号中的数字排序位解释了为什么使用字符串和数字进行两种不同的排序(使用“0900”
和900
)。要解决此问题,只需提供一个函数,按照您希望的方式对比较进行排序,如下所示:
let ma = new Map([...m.entries()].sort((a, z) => a[0] - z[0]);
您可以在同一MDN页面中查看这些compareFunction
s如何工作的详细信息:您仍然需要执行a[0]-z[0]
是的,正确。对不起,我看了一下这是一张正在整理的地图。将编辑我的答案。谢谢