Javascript 如何对空字符串、NaN、数字和无穷大的数组进行排序

Javascript 如何对空字符串、NaN、数字和无穷大的数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我试图对一个数组进行排序,其中包括空字符串、数字、“无穷大”、“无穷大”和“NaN”。我以字符串的形式接收所有的值,所以当涉及到空字符串inf和nan时,sort不能像预期的那样工作。有没有一种方法可以按升序和降序自定义我的排序功能?编辑:根据您的评论,“

我试图对一个数组进行排序,其中包括空字符串、数字、“无穷大”、“无穷大”和“NaN”。我以字符串的形式接收所有的值,所以当涉及到空字符串inf和nan时,sort不能像预期的那样工作。有没有一种方法可以按升序和降序自定义我的排序功能?

编辑:根据您的评论,
“<”-inf”<“Nan”<“inf”<…<-1<0<1<…
。您可以通过修改
顺序
数组来更改此设置

注意:如果数组包含
顺序中不存在的元素,则此代码将无法正常工作。您可以为此设置保护,也可以将其他特殊元素(如
0
)添加到
order
数组中

另请注意,
NaN
Infinity
(不是字符串文本)在javascript中也是一个数字。使用此代码,它们将在数字旁边排序

var basicCompare = function (a, b) {
    if (a > b) return 1;
    if (a < b) return -1;
    return 0;
}

var compare = function (a, b) {
    // 0 represents numbers.
    var order = ["", "-inf", "Nan", "inf", 0],
        orderOfNumber = order.indexOf(0),   
        orderOfA = typeof(a) === "number" ? orderOfNumber : order.indexOf(a),
        orderOfB = typeof(b) === "number" ? orderOfNumber : order.indexOf(b);

    if (orderOfA === orderOfNumber & orderOfB === orderOfNumber) {
        // They are both numbers, use regular comparison.
        return basicCompare(a, b);
    }

    // They are not both numbers, so use the axiomatic order.
    return basicCompare(orderOfA, orderOfB)
}

array.sort(compare);
var basicCompare=函数(a,b){
如果(a>b)返回1;
如果(a
您可以将对象用于排序顺序,并将给定项目移动到所需位置

var数组=[“”,2,3,0,“inf”,“-inf”,“Nan”,-1,-100000];
array.sort(函数(a,b){
变量顺序={“”:-4,“-inf”:-3,“Nan”:-2,“inf”:-1};
退货(订单[a]| | 0)-(订单[b]| | 0)| | a-b;
});
console.log(数组)

.as控制台包装{max height:100%!important;top:0;}
预期结果是什么?匿名函数没有
.name
;函数是如何调用的?为什么
String
“inf”
会被认为是
无限
,或者
String
“Nan”
“Nan”
?为什么不扩展当前逻辑并根据字符串的值为
结果
分配适当的值?为什么不使用像,不要使用字符串?您期望的顺序是什么?您需要解释如何将空字符串和NaN放入排序中。空字符串是否等于0,或者可能大于所有负数,但仍然小于0,因此得到一致的排序?或者,您可能希望它甚至小于
-无穷大。那NaN呢?将
NaN
称为负值或正值有点荒谬,但将其称为
0
几乎同样疯狂,因此您需要通过对所有这些内容进行排序来准确定义您的意思。排序后(使用字符串)
[“inf”、“Nan”、0、“、1、-1、-inf”]
您希望按字符串比较排序。我不想解析这个值。所以我的数组包含字符串和有效数字。我试图实现的顺序是arr=[“”,“-inf”,“Nan”,“inf”,-2,0,2,3]。请阅读代码,并随时问我有关它的任何问题。我想这正是你的意思。这是否总是将“”、inf、nan排序为字符串,然后根据各自的顺序将它们按数字进行分组?是的。我邀请您尝试使用一些示例数组。您喜欢我的版本吗?谢谢你的css:)?不,数字是用零分组的,然后按实际的增量分组,请参见编辑
-100000
@NinaScholz啊,我明白了。您是否知道有时从比较函数返回
NaN
而不是
0
是否有问题,就像
a
b
都是“inf”一样?排序回调需要小于零、零或大于零的数字。您对
NaN
作为值有什么期望?我假设,
NaN
被解释为零。