# Sort an Array Alphabetically using the sort Method!

When I run the following code in node.js, I get the results that are given. But when I run the same code in this browser I get error messages about what the output should be. Whats going on

``````
function alphabeticalOrder(arr) {
return arr.sort(function(a, b) {
return a >= b;
});

}

console.log(alphabeticalOrder(["a", "d", "c", "a", "z", "g"]));// ["a", "a", "c", "d", "g", "z"].
console.log(alphabeticalOrder(["x", "h", "a", "m", "n", "m"]));// ["a", "h", "m", "m", "n", "x"].
console.log(alphabeticalOrder(["a", "a", "a", "a", "x", "t"]));//  ["a", "a", "a", "a", "t", "x"].
``````

User Agent is: `Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36`.

The sort function should not return a boolean.

I donâ€™t see any error messages. Do you mean the tests arenâ€™t passing?

The tests arenâ€™t passing because the sort callback isnâ€™t sorting correctly.

From the link in @ArielLeslieâ€™s post:

If `compareFunction` is supplied, all non-`undefined` array elements are sorted according to the return value of the compare function. â€¦ If `a` and `b` are two elements being compared, then:

• If `compareFunction(a, b)` is less than 0, sort `a` to an index lower than `b` (i.e. `a` comes first).
• If `compareFunction(a, b)` returns 0, leave `a` and `b` unchanged with respect to each other, but sorted with respect to all different elements. â€¦
• If `compareFunction(a, b)` is greater than 0, sort `b` to an index lower than `a` (i.e. `b` comes first).

Your sort callback doesnâ€™t ever return `0`, `1`, or `-1`. It uses the `>=` operator, which only ever returns `true` or `false` (which coerce to `1` and `0` respectively, never `-1`).

The interesting thing is the challenge can be passed without using a compareFunction based on what is being sorted and tested.

Ahh, but then you miss out on learning how the sort callback works!

I believe not using the compare function may not yield a stable sort, but donâ€™t hold me to that.

Per the spec, I donâ€™t think itâ€™s ever required to be stable, regardless of whether a callback is used. Though it looks like it is at least stable in Chrome 70+.

1 Like

You would think that would be a requirement in the ECMA standard.

wow I seem to have spawned a lengthy discussion

The code Ive written gives the right result when I run it in node.js, but not when I run it on the website. It says that the results should be those given at the bottom of the left side.

So, its not that the code isnt working, I just dont know why Im getting different result on the site from those using node.js

Can anyone explain

Nodeâ€™s sort implementation is different than Chromeâ€™s, so that is more than likely the difference. Definitely take the opportunity to read about using compareFunctions as you can use them to solve this challenge plus learn something very valuable for other challenges later. The compare function will need to return a -1, 0, or 1.

okay, I mean I understand about the +1, 0, -1 but I was just wondering that if someone is programming with js using visual code and node.js, then how can they be sure that their code is production ready? And then what if the code work in chrome, but the user is using firefox or opera or something. Then if the code doesnt work, the user will think its broken. Things that make you go â€¦hmmmmmm

Hmm, very curious. Based on this Reddit thread, it looks like thatâ€™s due to Chrome changing the algorithm from QuickSort (unstable) to TimSort (stable), the latter of which Node 11+ also uses. You can check which version of Node youâ€™re using with `node --version`.

Iâ€™m actually surprised this change was ever made, given that the usual philosophy with JavaScript is â€śnever change the old behavior (even if itâ€™s plain incorrect) for fear of breaking legacy codeâ€ť. I guess they reviewed actual usage and found that very few sites were relying on the old behavior.

``````     return arr.sort((a, b) =>
{
return (a>b)?1:(a==b)?0:-1;
});
``````

it works but Im puzzled about the other way, why it wont work here but does in node.js

If you use a compareFunction it is guaranteed to work across all browsers. Chrome made a change which almost forces you to use compareFunctions. The other browsers are like Chrome used to be, so they are a little more flexible.

1 Like