繁体   English   中英

为什么排序不正确?

[英]Why isn't this sorting correctly?

所以我尝试采取像

 ["2015/10","2015/1","2015/6","2015/12","2015/3","2015/7","2015/2","2016/1","2015/8","2015/5","2015/11","2015/9","2015/4"]

,其中XXXX/YY是年/月格式,并按从小到大的顺序对其进行排序。

尝试使用https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort作为参考:

month_keys.sort(function(x,y){
    var partsX = x.split('/'), partsY = y.split('/');
    return partsX[0] < partsY[0] ? -1 : ( partsX[1] < partsY[1] ? -1 : 1 );
})...

那给了我

 ["2015/1","2015/11","2016/1","2015/10","2015/12","2015/2","2015/3","2015/5","2015/5","2015/6","2015/7","2015/8","2015/9"]

在开始时给出的示例数组中。 我究竟做错了什么?

您正在比较字符串,而不是数字。 比较字符串时,将它们逐个字符地进行比较,因此以1开头的任何东西都以2开头的东西先出现,即使它是10 vs 2。

将它们转换为数字,您应该得到想要的顺序:

var partsX = +x.split('/'),
    partsY = +y.split('/');

您还需要修正实际的比较:

if (partsX[0] < partsY[0]) return -1;
else if (partsX[0] > partsY[0]) return 1;
else if (partsX[1] < partsY[1]) return -1;
else if (partsX[1] > partsY[1]) return 1;
else return 0;

您有代表数字的字符串。 只需在变量前加上“ +”即可将其转换为数字:

return +partsX[0] < +partsY[0] ? -1 : ( +partsX[1] < +partsY[1] ? -1 : 1 );

我工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM