Search code examples
javascriptsortingsortcomparefunctioncustom-compare

How to ignore "-" and "." characters in a value during sort comparison?


I have an html page that has a field that can be sorted. I also have created a javascript function that can sort that field in order. Let's imagine p_cSort is the 'id' name of that field.

function change_sort(neworder) {
 document.sortForm.p_cSort.value = neworder;
 document.sortForm.submit();

However when I have values like

12.34
12-35
12.36
12-33

and I search for them on my search page. The results returned are

12.34
12.36
12-33
12-35

How can I ignore the characters "." and "-" when sorting?

So the result I am looking for should be:

12-33
12.34
12-35
12.36

Solution

  • Why don't you make a custom sort function liek this:

    var x = ['12.5', '11.3', '13-5', '10-0'];
    x.sort(function(a, b){
        a = a.replace(/[-]/, '.');
        b = b.replace(/[-]/, '.');
        if( parseInt(a) < parseInt(b) ) return -1;
        if( parseInt(a) > parseInt(b) ) return 1;
        return 0;
    });
    

    Output:

    ["10-0", "11.3", "12.5", "13-5"]
    

    This will also work if you have 125.5 and so on. because the . and the - are both used in the compare.

    Example with >= 100

    So input:

    ["100-0", "11.3", "12.5", "13-5"]
    

    Will output

    ["11.3", "12.5", "13-5", "100-0"]