为什么这种排序不正确?

时间:2016-01-06 23:47:39

标签: javascript algorithm sorting

所以我试图采用类似

的数组
 ["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/en-US/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"]
我在开头给出的示例数组中的

。我做错了什么?

2 个答案:

答案 0 :(得分:5)

您正在比较字符串,而不是数字。比较字符串时,它们将按字符比较char,因此任何以1开头的内容都会出现在例如字符串之前。用2.即使它是10比2。

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

$exists

您还需要修复实际比较:

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

答案 1 :(得分:-1)

你有代表数字的字符串。只需在变量前添加一个'+'即可将其转换为数字:

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

我工作......