使用多个小数点对"数字"进行排序

thu*_*gsb 9 javascript sorting decimal-point

我有一堆"数字"有多个小数点(所以它们真的是字符串).但是,我想对它们进行排序,好像它们是数字一样.

1.1.1
10.2.3
2.6.7
21.10.4
3.10.12
4.11.5
4.1.16
6.4.23
Run Code Online (Sandbox Code Playgroud)

我希望它们按第一组数字(在第一个小数点之前)排序,然后按第二组排序,然后按第三组排序(可能继续第四组或更多).它们应按此顺序排列:

1.1.1
2.6.7
3.10.12
4.1.16
4.11.5
6.4.23
10.2.3
21.10.4
Run Code Online (Sandbox Code Playgroud)

使用JS执行此操作的最佳方法是什么?我想我可能需要将每个数字分成一个数组,但也许有更好的方法.想法?

meg*_*wac 10

我觉得这样的事情可以解决问题:

nums.sort(function(a, b) {
    var nums1 = a.split(".");
    var nums2 = b.split(".");

    for (var i = 0; i < nums1.length; i++) {
        if (nums2[i]) { // assuming 5..2 is invalid
            if (nums1[i] !== nums2[i]) {
               return nums1[i] - nums2[i];   
            } // else continue
        } else {
            return 1; // no second number in b
        }
    }
    return -1; // was missing case b.len > a.len
});
Run Code Online (Sandbox Code Playgroud)

更新heres一个小提琴

什么时候 var nums = ['1.1.1', '2.6.7.3.2', '2.6.7', '2.6.7.3', '2.6.7.1', '6.4.23', '2.7']

这样排序=> ['1.1.1','2.6.7.1','2.6.7.3.2','2.6.7','2.6.7.3','2.7','6.4.23']


lea*_*eaf 5

取悦兆瓦克 :D

list.sort(function (a, b) {
    var result;
    a = a.split('.');
    b = b.split('.');
    while (a.length) {
        if (result = a.shift() - (b.shift() || 0)) {
            return result;
        }
    }
    return -b.length;
});
Run Code Online (Sandbox Code Playgroud)

处理任意数量的点:

input  ['1.3', '10', '1.2', '2', '1.1.2', '1.1.1', '1.1']
output ['1.1', '1.1.1', '1.1.2', '1.2', '1.3', '2', '10']
Run Code Online (Sandbox Code Playgroud)