By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,189 Members | 1,559 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,189 IT Pros & Developers. It's quick & easy.

Array sort function sorts on chars not numbers ... help ! how to sort numbers

P: n/a
My question is ... How do I sort an Array on numeric, not character values ?

In the example below, after sorting the contents are 1,10,2,3 .

How do I get the contents to be 1,2,3,10 ?

Thanks,

em

<html>
<head>
<script>
function TestSort() {
var nums = new Array(0);
nums[0] = 1;
nums[1] = 2;
nums[2] = 10;
nums[3] = 3;
nums.sort();
for ( i = 0 ; i < 4 ; i++ ) {
alert(nums[i]);
}
return true;
}
</script>
</head>
<body bgcolor="lightblue">
<input type="button" onclick="TestSort();" value="Click Me">
</body>
</html>
Jul 23 '05 #1
Share this Question
Share on Google+
5 Replies


P: n/a
"GIMME" <gi*******************@yahoo.com> wrote in message
news:3f**************************@posting.google.c om...
My question is ... How do I sort an Array on numeric, not character values ?
In the example below, after sorting the contents are 1,10,2,3 .

How do I get the contents to be 1,2,3,10 ?

Thanks,

em

<html>
<head>
<script>
function TestSort() {
var nums = new Array(0);
nums[0] = 1;
nums[1] = 2;
nums[2] = 10;
nums[3] = 3;
nums.sort();
for ( i = 0 ; i < 4 ; i++ ) {
alert(nums[i]);
}
return true;
}
</script>
</head>
<body bgcolor="lightblue">
<input type="button" onclick="TestSort();" value="Click Me">
</body>
</html>


Here's a solution; watch for word-wrap.
<html>
<head>
<title>sortnum.htm</title>
<script type="text/javascript">
function TestSort() {
var nums = new Array(0);
nums[0] = 1;
nums[1] = 2;
nums[2] = 10;
nums[3] = 3;
nums.sort();
for (var i=0; i<nums.length; i++) {
nums[i] = (10000 + nums[i]);
}
nums.sort();
var numx = "";
for (var j=0; j<nums.length; j++) {
numx += (nums[j] - 10000) + "\n";
}
alert(numx);
}
</script>
</head>
<body onload="TestSort()">
</body>
</html>

Jul 23 '05 #2

P: n/a
Ivo
"GIMME" wrote
My question is ... How do I sort an Array on numeric, not character values ?
In the example below, after sorting the contents are 1,10,2,3 .

How do I get the contents to be 1,2,3,10 ?
Two steps. See inserted lines:
<html>
<head>
<script>
function TestSort() {
var nums = new Array(0);
nums[0] = 1;
nums[1] = 2;
nums[2] = 10;
nums[3] = 3;
nums.sort();
1. Make that:
nums.sort(sortnumeric);
for ( i = 0 ; i < 4 ; i++ ) {
alert(nums[i]);
}
return true;
}
2. And add:
function sortnumeric(a,b){ return parseFloat(a)-parseFloat(b); }
</script>
</head>
<body bgcolor="lightblue">
<input type="button" onclick="TestSort();" value="Click Me">
</body>
</html>


HTH
Ivo
Jul 23 '05 #3

P: n/a
Lee
GIMME said:

My question is ... How do I sort an Array on numeric, not character values ?


It's hard to believe that you could find any documentation on Array.sort()
that doesn't include an example of how to sort numerically.
There's one at this link:

http://tinyurl.com/4ohf4

<http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/array.html#1196882>

Jul 23 '05 #4

P: n/a
JRS: In article <40*********************@news.wanadoo.nl>, dated Thu,
22 Jul 2004 02:44:28, seen in news:comp.lang.javascript, Ivo
<no@thank.you> posted :
"GIMME" wrote
My question is ... How do I sort an Array on numeric, not character values

That might be FAQ-worthy; I've seen it quite a few times. There's
obvious generalisation to other types of sort, e.g. dates using getTime
or valueOf, both of which should be quick.

2. And add:
function sortnumeric(a,b){ return parseFloat(a)-parseFloat(b); }


That requires, for each of the ~ o(N ln N) comparisons, two conversions
of number to string and two conversions of string to number. Only
subtraction is needed.

I can believe that adding a large constant to each number could be
quicker, for large sorts, since it avoids calling a user-defined
function.

Someone tell ECMA to add a numericSort method to anything that has a
sort method. The chief benefit would be that, eventually, it would
appear in documentation, help files, and books; and it should be a
little quicker.

--
John Stockton, Surrey, UK. ?@merlyn.demon.co.uk Turnpike v4.00 MIME.
Web <URL:http://www.merlyn.demon.co.uk/> - w. FAQish topics, links, acronyms
PAS EXE etc : <URL:http://www.merlyn.demon.co.uk/programs/> - see 00index.htm
Dates - miscdate.htm moredate.htm js-dates.htm pas-time.htm critdate.htm etc.
Jul 23 '05 #5

P: n/a
GIMME wrote:
My question is ... How do I sort an Array on numeric, not
character values ?


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

var a = new Array(...);
a.sort(numSort);

It is described in detail in the Client-side JavaScript 1.3+
References, if you would have cared to RTFFAQ/RTFM prior to
posting you would have known.
PointedEars
Jul 23 '05 #6

This discussion thread is closed

Replies have been disabled for this discussion.