Javascript 用java脚本对字母数字数组进行排序
我有一个字母数字数组-Javascript 用java脚本对字母数字数组进行排序,javascript,arrays,natsort,Javascript,Arrays,Natsort,我有一个字母数字数组- var a1 =["3800tl-24G-2XG-PoEP", "3500", "stack-TA", "2620-48-PoEP", "2120", "3800tl-24G-2XG-PoEP"]; 我尝试使用natsort对该数组进行排序,它提供了正确的输出- `Array ( [4] => 2120 [3] => 2620-48-PoEP [1] => 3500 [0] => 3800tl-24G-2XG-PoEP [5] => 380
var a1 =["3800tl-24G-2XG-PoEP", "3500", "stack-TA", "2620-48-PoEP", "2120", "3800tl-24G-2XG-PoEP"];
我尝试使用natsort对该数组进行排序,它提供了正确的输出-
`Array ( [4] => 2120 [3] => 2620-48-PoEP [1] => 3500 [0] => 3800tl-24G-2XG-PoEP [5] => 3800tl-24G-2XG-PoEP [2] => stack-TA )`
我试着用javascript
-
var a1 =["3800tl-24G-2XG-PoEP", "3500", "stack-TA", "2620-48-PoEP", "2120", "3800tl-24G-2XG-PoEP"];
var a2 = a1.sort(function(a,b){
var charPart = [a.substring(0,1), b.substring(0,1)],
numPart = [a.substring(1)*1, b.substring(1)*1];
if(charPart[0] < charPart[1]) return -1;
else if(charPart[0] > charPart[1]) return 1;
else{ //(charPart[0] == charPart[1]){
if(numPart[0] < numPart[1]) return -1;
else if(numPart[0] > numPart[1]) return 1;
return 0;
}
});
$('#r').html(a2.toString())
var a1=[“3800tl-24G-2XG-PoEP”、“3500”、“堆叠TA”、“2620-48-PoEP”、“2120”、“3800tl-24G-2XG-PoEP”];
变量a2=a1.排序(函数(a,b){
var charPart=[a.子字符串(0,1),b.子字符串(0,1)],
numPart=[a.子字符串(1)*1,b.子字符串(1)*1];
if(charPart[0]charPart[1])返回1;
else{//(charPart[0]==charPart[1]){
if(numPart[0]numPart[1])返回1;
返回0;
}
});
$('#r').html(a2.toString())
这给了我输出-
2620-48-PoEP、21203800TL-24G-2XG-PoEP、35003800TL-24G-2XG-PoEP、堆栈TA
为什么javascript代码不将2120作为第一个元素。
javascript代码有什么问题?替换这一行
[a.substring(1)*1, b.substring(1)*1]
…与
[parseInt(a.substring(1), 10), parseInt(b.substring(1), 10)]
…虽然排序函数仍不尽可能通用,但它仍能工作()
说明:a.substr(1)*1
(更好地写为+a.substr(1)
,顺便说一句)将该子字符串转换为Number
类型。理论上,这应该是一个实数。但在JS实践中,它会失败(给出NaN
)如果字符串的其余部分不是一个数字的完整表示形式,则除了该数字之外没有其他内容
例如,对于2620-48-PoEP
行,'620-48-PoEP'
被转换为Number
。现在JS无法将其解释为620
-它太粗体了,因为那里有一些其他有意义的(=非空白)字符。因此,它不是给你620
,而是给你NaN
现在,任何NaN
和NaN
之间的比较都是错误的(除了!=
)-这基本上会使排序功能失控
作为旁注,
array.sort
就地更新对象-您不需要使用对它的另一个引用(a2
变量),您可以在替换其不返回后使用a1
anything@user3496418检查演示(控制台输出)。您能看到输出吗?抱歉,不确定您的意思。在a1.sort
之后,您将得到排序后的数组,因此您可以对其执行任何操作。例如,使用$('#r').HTML(a1.join('
'))以HTML显示;
,就像这样。是的,我理解。谢谢你这么详细的解释。这无助于你解决问题,但当你试图获取字符时,使用括号[]
,而不是子字符串()
,例如:var charPart=[a[0],b[0];