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

G

GIMME

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);
}
return true;
}
</script>
</head>
<body bgcolor="lightblue">
<input type="button" onclick="TestSort();" value="Click Me">
</body>
</html>
 
M

McKirahan

GIMME said:
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);
}
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 = (10000 + nums);
}
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>
 
I

Ivo

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);
}
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
 
D

Dr John Stockton

JRS: In article <[email protected]>, dated Thu,
22 Jul 2004 02:44:28, seen in Ivo
"GIMME" wrote

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.
 
T

Thomas 'PointedEars' Lahn

GIMME said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,733
Messages
2,569,439
Members
44,829
Latest member
PIXThurman

Latest Threads

Top