JavaScript对具有混合类型值的数组进行排序

JavaScript sorting of an array with mixed type values

本文关键字:数组 排序 类型 混合 JavaScript      更新时间:2023-09-26

我有以下数组,需要按降序进行数字排序:

var arr = ['5', '5.1', '5.1.4', '6.0.0', '500'];

所需的顺序如下:

500
6.0.0
5.1.4
5.1
5

然而,我尝试过的所有方法似乎都没有得到所需的结果。下面是一个不能处理这类数组的排序函数的例子:

arr = arr.sort(function(a,b){return b - a});

谁能给我一个提示,如何才能实现这一点?

谢谢。

以下解决方案的逻辑完全取自这个答案(所有功劳都在那里!),但结果是颠倒的,使顺序降序(+修复小错误):

['5', '5.1', '5.1.4', '6.0.0', '500'].sort(function(a, b) {
    if (a === b) {
       return 0;
    }
    var a_components = a.split('.'),
        b_components = b.split('.'),
        len = Math.min(a_components.length, b_components.length);
    for (var i = 0; i < len; i++) {
        if (parseInt(a_components[i], 10) > parseInt(b_components[i], 10)) {
            return -1;
        }
        if (parseInt(a_components[i], 10) < parseInt(b_components[i], 10)) {
            return 1;
        }
    }
    if (a_components.length > b_components.length) {
        return -1;
    }
    if (a_components.length < b_components.length) {
        return 1;
    }
    return 0;
});
// >> ["500", "6.0.0", "5.1.4", "5.1", "5"]
arr.sort(function(a,b){
    //if they are equal, return 0
    if(a==b) return 0;
    //split version numbers and compare each one until we got one that differs
    var verA = a.split('.'), verB = b.split('.');
    for(var i=0;i<Math.max(verA.length, verB.length);i++) {
        //verA is shorter or equal, so we return 1
        if(verA[i]===undefined)
            return 1;
        //verB is shorter or equal, so we return -1
        if(verB[i]===undefined)
            return -1;
        //first encounter where the 2 are defined and are different
        if(verB[i]-verA[i]!=0)
            return verB[i]-verA[i];
        //in other situations they are equal, so we go to the next iteration
    }
});