Javascript 排序混合数组

Javascript 排序混合数组,javascript,typescript,Javascript,Typescript,我有一个混合数组,我需要先对非数值排序,然后再对数值排序 这是我的数据 [{Description:"c"},{Description:"a"},{Description:"1"},{Description:"b"},{Description:"2"},{Description:"11"}] 我想把排序后的输出作为 A. B C 1. 2. 十一, 我所尝试的: (如果为空,

我有一个混合数组,我需要先对非数值排序,然后再对数值排序

这是我的数据

[{Description:"c"},{Description:"a"},{Description:"1"},{Description:"b"},{Description:"2"},{Description:"11"}]
我想把排序后的输出作为 A. B C 1. 2. 十一,

我所尝试的:

(如果为空,则检查Utils.Inue)

.sort(函数(a、b){
返回Utils.Inue(parseFloat(a.Description!))| | Utils.Inue(b.Description!)?a.Description!b.Description!?1:0:parseFloat(a.Description!)-parseFloat(b.Description!);
})

但是输出结果是1 2 11 a b c

您可以检查该值是否为有限值并将数字排序到底部

const
数组=[{Description:“c”},{Description:“a”},{Description:“11”},{Description:“b”},{Description:“2”},{Description:“1”}];
sort({Description:a},{Description:b})=>
isFinite(a)-isFinite(b)||
a-b||
+(a>b)| |-(a

.as console wrapper{max height:100%!important;top:0;}
您可以检查值是否为有限值,并将数字排序到底部

const
数组=[{Description:“c”},{Description:“a”},{Description:“11”},{Description:“b”},{Description:“2”},{Description:“1”}];
sort({Description:a},{Description:b})=>
isFinite(a)-isFinite(b)||
a-b||
+(a>b)| |-(a
.as控制台包装{最大高度:100%!重要;顶部:0;}
var obj=[{Description:“c”},{Description:“a”},{Description:“1”},{Description:“b”},{Description:“2”},{Description:“11”}];
变量sortArray=(对象排序)((a,b)=>{
设res=0
如果(!isNaN(a.说明)){
返回(+a.说明)-(b.说明);
}否则{
如果(a.说明>b.说明){
res=1;
}否则如果(a.说明
var obj=[{Description:“c”},{Description:“a”},{Description:“1”},{Description:“b”},{Description:“2”},{Description:“11”}];
变量sortArray=(对象排序)((a,b)=>{
设res=0
如果(!isNaN(a.说明)){
返回(+a.说明)-(b.说明);
}否则{
如果(a.说明>b.说明){
res=1;
}否则如果(a.说明控制台日志(Sortaray)我能够用此代码解决问题:

.sort(function(a,b){
if(isNaN(+a.Description!) && !isNaN(+b.Description!))
{
    return -1;
}
else if(!isNaN(+a.Description!) && isNaN(+b.Description!))
{
    return 1;
}
else if(!isNaN(+a.Description!) && !isNaN(+b.Description!))
{
    return parseFloat(a.Description!)>parseFloat(b.Description!) ? 1 : parseFloat(a.Description!) == parseFloat(b.Description!) ? 0 : -1 ;
}
else
{
     return a.Description!>b.Description! ? 1 : a.Description! == b.Description! ? 0 : -1 ;
}

我能够用以下代码解决问题:

.sort(function(a,b){
if(isNaN(+a.Description!) && !isNaN(+b.Description!))
{
    return -1;
}
else if(!isNaN(+a.Description!) && isNaN(+b.Description!))
{
    return 1;
}
else if(!isNaN(+a.Description!) && !isNaN(+b.Description!))
{
    return parseFloat(a.Description!)>parseFloat(b.Description!) ? 1 : parseFloat(a.Description!) == parseFloat(b.Description!) ? 0 : -1 ;
}
else
{
     return a.Description!>b.Description! ? 1 : a.Description! == b.Description! ? 0 : -1 ;
}

谢谢你的回答,尼娜。如何在typescript中使用此选项?我发现类型“boolean”不可分配给类型“number error”,因为它需要1,0或-1。请在上面尝试使用一元加号进行第一次比较。感谢Nina的回答。如何在typescript中使用此选项?我得到的类型“boolean”不可分配给类型“number error”,因为它需要1,0或-1。请在上面使用一元加号进行第一次比较。