Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sort JavaScript String Array containing numbers

I have an array in JavaScript that contains the following:

  • ["Value 1", "Value 5". "Value 10", "Value 11"];

How would I go about sorting this array so that it does not appear as follows:

  • ["Value 1", "Value 10". "Value 11", "Value 5"];

But as:

  • ["Value 1", "Value 5". "Value 10", "Value 11"];

Any help would be great.

like image 526
williamtroup Avatar asked Dec 29 '22 12:12

williamtroup


2 Answers

You need to extract the numeric values from the strings and sort based on those, just like vlood said. For example, try this code:

function mySort(arr)
{
    var regex = /Value\s([0-9]+)/;

    function map(str) {
        return Number(regex.exec(str)[1]);
    }

    return arr
    .sort(
        function (a,b) {
            var av = map(a), bv = map(b);
            return av < bv ? -1 : av > bv ? 1 : 0;
        })
}

mySort(["Value 1", "Value 10", "Value 11", "Value 5"]);
like image 139
Markus Johnsson Avatar answered Dec 31 '22 03:12

Markus Johnsson


If you are enthusiastic about writing it yourself, you can just parse the items with an regular expression and compare the second part. Those will match something like

"Value\s[1-9][0-9]*"

like image 27
vlood Avatar answered Dec 31 '22 01:12

vlood