我有一些代码可以按字母顺序对名称进行排序。
我遇到的问题是它处理小数的方式。
它对名称进行排序,如下所示(我宁愿它按数字递增):
DOG - 1.0510
DOG - 1.1031
DOG - 11.1792
DOG - 12.0920
DOG - 12.1170
DOG - 2.0186 <-- should be after "DOG - 12.117" ???
DOG - 21.4070
DOG - 22.0790
DOG - 23.0390
CAT - 1.0810
CAT - 1.1071
CAT - 11.1592
CAT - 12.0691
CAT - 12.1718
CAT - 2.0186 <-- again should be after "CAT -12.1718" ???
CAT - 21.1403
CAT - 22.081
CAT - 23.069
我的对象数组中有名称/值,如下所示:
var array = [
{
"myname":"DOG",
"value":1.0051
},
{
"myname":"DOG",
"value":1.1071
}
];
这是我在网上找到的代码片段中使用的代码。
function(x, y){
var xName=x.myname.toLowerCase(), yName=y.myname.toLowerCase()
if (xName < yName) //string sort ascending
return -1
if (xName < yName)
return 1
return 0 //return default value (without sorting)
}
认为问题在于您还需要按值排序,但您只按名称排序。
下面应该修复它,它按字母顺序排序,然后按数字排序。
Code:
function(x, y) {
var parts = {
x: x.myname.split(' - '),
y: y.myname.split(' - ')
};
if (parts.x[0] == parts.y[0]) // strings are the same
return parseFloat(parts.x[1]) - parseFloat(parts.y[1]); // sort by number
return parts.x[0] > parts.y[0] ? 1 : -1; // sort by string
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)