JSFiddle - React, Tailwind, and code Playground

by blesh

JavaScript

function sortNicely(coll) {
    var keys = coll.map(function (x) {
        var keys = x.split(/([0-9\.]+)/).map(function (y) {
            return isNaN(y) ? y : parseFloat(y);
        });
        keys.val = x;
        return keys;
    });
    var sortKeys = function () {
        var resort = false;
        keys.sort(function (a, b) {
            var len = Math.min(a.length, b.length),
                i;
            for (i = 0; i < len; i++) {
                if (a[i] !== b[i]) {
                    if(i === len - 1) {
                        resort = true;
                    }
                    return a[i] - b[i];
                }
            }
            if(resort) sortKeys();
        });
    };
    return keys.map(function (x) {
        return x.val;
    });
}

var toSort = [
    'loser 10',
    'user 1',
    'user 2',
    'user 10.1',
    'user 101',
    'loser 1',
    'loser 2',
    'user 10',
    'loser 20'];

console.log(sortNicely(toSort));