How to sort numbers? [duplicate]

Below is the code:

<script type="text/javascript">

function sortNumber(a,b) {
  return a - b;
}

var n = ["10", "5", "40", "25", "100", "1"];
document.write(n.sort(sortNumber));

</script>

Is the sortNumber function for sorting a number? What do a and b mean and why does it exist? Why sortNumber in n.sort(sortNumber) doesn't specify any parameter of a and b?


The JavaScript sort() function may or may not take a parameter.
The parameter would be a function - meaning what function is to be used to assess which of two elements should be before the other.

The n array is made of strings representing numbers.
Doing a simple sort() without a function, an alphabetical order would be used: the result would be

 "1", "10", "25"... "5"

and is not correct.

Providing a function, sortNumber, tells sort to call that function with two elements of the array each time the sort algorithm wants to know which of the two items is before the other.

Thus sortNumber provided with two items, does a numerical operation to return either

  • a negative value, meaning a is before b
  • a positive value, b is before a
  • zero: they're equal in terms of order (order doesn't matter).

You need to consider what sort() consumes; sort() consumes a function that defines the sort oder. To simplify:

array.sort(sortfunc)

So when you define the function sortNumber, you are actually defining how sort will sort the array.

So if we define a function that's body is defined as:

return a - b;

We are asking to sort by ascending order

If we define a function with body:

return b - a;

We are asking to sort by descending order

Hope this helps


When you write n.sort(sortNumber), you're passing the sortNumber function to sort.
You aren't calling the sortNumber function, so you don't pass any parameters.

Javascript's sort method takes an optional parameter: a function that compares two elements.
sort will call the function you pass to compare pairs of elements in the array.
The compare function that you supply should take two parameters and return a number indicating which one is bigger.