我有一些代码可以按字母顺序排列名称 我遇到的问题是它处理小数的方式 它命令下面的名字(我宁愿用数字增加):
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)
}
答案 0 :(得分:2)
认为问题是你需要按值排序,但你只是按名称排序
下面应该修复它,它按字母顺序排序,然后按数字排序。
代码:
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
}
答案 1 :(得分:0)
我觉得你差不多了。你只是忘了比较数字:
function(x, y){
var xName=x.myname.toLowerCase(), yName=y.myname.toLowerCase();
if (xName < yName){ //string sort ascending
return -1
}else if (xName < yName){
return 1
}else if (x.value < y.value){
return -1;
}else if (x.value > y.value){
return 1;
}else{
return 0; // Identical keys
}
}