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];