这里我使用javascript对字母数字字符串值进行排序。但是它只对字符串进行排序。我需要的是从字符串中拆分数值并对数值进行排序。这是我的代码
function sortUnorderedList(ul, sortDescending) {
if (typeof ul == "string")
ul = document.getElementById(ul);
var lis = ul.getElementsByTagName("li");
var vals = [];
for (var i = 0, l = lis.length; i < l; i++)
vals.push(lis[i].innerHTML);
vals.sort();
if (sortDescending)
vals.reverse();
for (var i = 0, l = lis.length; i < l; i++)
lis[i].innerHTML = vals[i];
}
有什么建议吗?
编辑:当前结果
PPG 101
PPG 102
PPG 57
PPG 58
PPG 99
预期结果:
PPG 57
PPG 58
PPG 99
PPG 101
PPG 102
答案 0 :(得分:2)
要执行数字排序,必须在调用sort方法时将函数作为参数传递。
vals.sort(function(a, b) {
return (a-b);
});
有关详细信息,请参阅http://www.javascriptkit.com/javatutors/arraysort.shtml
答案 1 :(得分:1)
如果您希望首先按字符串排序,然后按空格后的数值排序,则需要指定自己的函数以传入sort
函数,如下所示:
arr.sort(function(a,b) {
a = a.split(' ');
b = b.split(' ');
if (a[0] == b[0]) {
return parseInt(a[1]) - parseInt(b[1]);
}
return a[0] > b[0];
});
上面的示例首先按字符串排序,然后按字符串后面的数字排序(数字)。上面的代码适用于被排序的假设值将始终采用上述格式,并且没有对输入进行任何检查。
答案 2 :(得分:0)
function sort(values) {
var y = values.sort(function (a, b) {
var x = a.split(' ');
var y = a.split(' ');
if (parseInt(x[1]) > parseInt(y[1])) {
return a > b;
}
return a < b;
});
return y;
}