8

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?

leonheess
  • 16,068
  • 14
  • 77
  • 112
dramasea
  • 3,370
  • 16
  • 49
  • 77

4 Answers4

6

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).
Déjà vu
  • 28,223
  • 6
  • 72
  • 100
  • but i dont know what a and b represent for in the function.. – dramasea Jan 02 '11 at 03:19
  • *a* and *b* are variables that take the values provided by the `sort` function. This is a *convention*, you give the name of the function to `sort`, and create that function that takes two parameters - you can call them what you want, e.g. *param1* and *param2* . – Déjà vu Jan 02 '11 at 03:22
  • I have a feeling that `sort()` internally uses this function recursively; otherwise I can't make sense of how it works. – ankush981 Nov 14 '14 at 10:43
3

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

Adrian Carolli
  • 695
  • 6
  • 21
1

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.

SLaks
  • 868,454
  • 176
  • 1,908
  • 1,964
0

The sort function accepts 2 arguments, a and b, and is supposed to return a number.

  • if a is more than b then it should return any positive number.
  • if a is less than b then it should return any negative number.
  • if a is equals to b then it should return 0.

And a - b produces that number. You can also sort it backwords by using b - a instead. You get the idea.

Thai
  • 10,746
  • 2
  • 45
  • 57
  • but a and b isnt represent anything in the above code – dramasea Jan 02 '11 at 03:24
  • 1
    You don't really call the `sortNumber` function. You just give `sortNumber` to `n.sort()`, and then `n.sort` calls it for you. `n.sort`, or `Array.prototype.sort` expects that the function you give to it takes 2 values and return the comparison result, as I said above. Then it will sort the array for you. – Thai Jan 02 '11 at 09:29