var sor = ['11', '0', '22', '33'];
for(var i = 0 ; i <=10;i++){
sor.push('11222111111113332323231111'+i);
}
function sortnum(num1,num2){
return num2-num1;
}
sor.sort(sortnum);
$.each(sor,function(index,val){
$('div').append(val+'<br/>');
});
firefox的结果如下:
122111111111333232323111110
12211111111133323232311113
12211111111133323232311119
12211111111133323232311118
12211111111133323232311110
12211111111133323232311111
12211111111133323232311112
12211111111133323232311117
12211111111133323232311114
12211111111133323232311115
12211111111133323232311116
33
22
11
0
但我期望的是:
122111111111333232323111110
12211111111133323232311119
12211111111133323232311118
12211111111133323232311117
12211111111133323232311116
12211111111133323232311115
12211111111133323232311114
12211111111133323232311113
12211111111133323232311112
12211111111133323232311111
12211111111133323232311110
33
22
11
0
答案 0 :(得分:2)
通过减去参数,它们将隐式转换为数字。但是,像122111111111333232323111110
这样的数字只是超出范围,Javascript可以处理的最大整数(本机)是9007199254740992
(参见this)。
这会导致计算失败。
如果您想比较这些字符串化数字,您需要将字符串与自定义比较进行比较,而不是依赖于内置数学。它可能看起来像这样:
function compare(a, b) {
if(a.length !== b.length) {
return b.length - a.length;
}
for(var i = 0; i < a.length; i++) {
if(a[i] !== b[i]) {
return b[i] - a[i];
}
}
return 0;
}
结帐this fiddle。但是这只适用于正整数。