gpt4 book ai didi

Javascript排序结果不正确,什么问题?

转载 作者:行者123 更新时间:2023-12-02 18:06:45 25 4
gpt4 key购买 nike

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

最佳答案

通过减去参数,它们将隐式转换为数字。然而,像 122111111111333232323111110 这样的数字就超出了范围,Javascript 可以( native )处理的最大整数是 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 。然而,这仅适用于正整数。

关于Javascript排序结果不正确,什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20032778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com