[英]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.