0

I'm trying to sort an array shown below using the .sort() method in JavaScript.

var addresses = [
    "5 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan",     
    "51 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "53 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "55 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "57 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "7 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "9 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan"
];

However, after the .sort method has been invoked and I write the array to the document. The array doesn't seem to change into ascending numeric order.

Can anyone see where I'm going wrong?

1
  • 2
    What is the expected output? Commented Jul 22, 2015 at 8:37

5 Answers 5

2

Your array contains strings, so they'll be sorted alphabetically instead of numerically. You'll want to use a sorting function as the parameter of array.sort and parse out the house number.

Sign up to request clarification or add additional context in comments.

Comments

1

Got it working in the end with the following code shown below:

function naturalCompare(a, b) {
    var ax = [], bx = [];

    a.replace(/(\d+)|(\D+)/g, function(_, $1, $2) { ax.push([$1 || Infinity, $2 || ""]) });
    b.replace(/(\d+)|(\D+)/g, function(_, $1, $2) { bx.push([$1 || Infinity, $2 || ""]) });

    while(ax.length && bx.length) {
        var an = ax.shift();
        var bn = bx.shift();
        var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
        if(nn) return nn;
    }

    return ax.length - bx.length;
}

addresses = addresses.sort(naturalCompare);

1 Comment

addresses = addresses.sort(naturalCompare); is not needed. the sort method update the array, so you don't need to reassign addresses.
1

You could use this sort function that compare the first numbers of the strings

var addresses = [
    "5 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan",     
    "51 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "53 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "55 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "57 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "7 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "9 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan"
];


addresses.sort(function(a, b){
  return +a.split(" ")[0] - +b.split(" ")[0];
});

console.log(addresses);

Comments

0

check below example

var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a-b});

http://www.w3schools.com/jsref/jsref_sort.asp

Comments

0

try this

var addresses = [
    "5 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan",     
    "51 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "53 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "55 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "57 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "7 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan", 
    "9 Glyn Eiddew, , , , Llanbradach, Caerphilly, Mid Glamorgan"
];

addresses.sort(function(a, b){
    return a.split(' ')[0] - b.split(' ')[0]
})

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.