I am not using an associative array. I'm using 1d array like this,
array("1,a","5,b","2,c","8,d","6,f");
How can I sort this array?
The result should be,
array("1,a","2,c","5,b","6,f","8,d");
I am not using an associative array. I'm using 1d array like this,
array("1,a","5,b","2,c","8,d","6,f");
How can I sort this array?
The result should be,
array("1,a","2,c","5,b","6,f","8,d");
sort() without a custom sorting function will sort it how you wish (lexicographically).
>>> ["1,a","5,b","2,c","8,d","6,f"].sort();
["1,a", "2,c", "5,b", "6,f", "8,d"]
Note that this will sort the original array. You can make a shallow copy with slice().
If any of your numbers are larger than 9, and you want to sort it via the ordinal of the number, you will need a custom sorting function.
["1,a","5,b","2,c","8,d","6,f"].sort(function(a, b) {
return parseInt(a, 10) - parseInt(b, 10);
});
Use array.sort() built-in JS function. Documentation here: http://www.w3schools.com/jsref/jsref_sort.asp
Try this
<script>
var abc=new Array("1,a","5,b","2,c","8,d","6,f");
document.write("<br/>");
document.write(abc.sort());
</script>
var arrayVar = ["1,a","2,c","5,b","6,f","8,d"];
arrayVar.sort()
arrayVar; // "1,a","2,c","5,b","6,f","8,d"
try with:
function sortNumber(a,b)
{
return (a.split(","))[0] - (b.split(","))[0] ;
}
var n = ["1,a","5,b","2,c","8,d","6,f"];
alert( n.sort(sortNumber) );
Here's what I do:
var arr1 = new Array("1,a","5,b","2,c","8,d","6,f");
var arr2 = arr1.sort( function(a, b){
var ax = a.split(",");
var bx = b.split(",");
return ax[0]-bx[0];
});
document.getElementById("result").innerHTML = arr2.join(" : ");
You need to write your own comparison function to compare the numbers, otherwise the default sort() would put something like "40,a" before "5,b".
Here's an example which just splits on the , character and assumes the value before it is numerical. I've added "40,a" into the example to show that it orders numbers >9 correctly.
function mySort(a,b)
{
return a.split(",", 1) - b.split(",", 1);
}
var theArray = ["1,a", "5,b", "2,c", "40,a", "8,d", "6,f"];
theArray.sort(mySort); // "1,a","2,c","5,b","6,f","8,d","40,a"
I'm going to go ahead and assume you want to sort by the number part first, sorting numerically, and then have a secondary lexographic (string) sort on the bit after the comma. That way a value like "11,a" will end up after "2,a" - if you just do a default sort "11,a" will end up before "2,a". So:
var a = ["1,a","11,a","8,a","24,z","5,b","2,c","8,d","6,f"];
a.sort(function(a,b) {
var aparts = a.split(","),
bparts = b.split(","),
anum = +aparts[0], // convert first part to number
bnum = +bparts[0],
aletter = aparts[1],
bletter = bparts[1];
if (anum === bnum)
return aletter < bletter ? -1 : aletter === bletter ? 0 : -1;
else
return anum - bnum;
});
Result:
["1,a", "2,c", "5,b", "6,f", "8,a", "8,d", "11,a", "24,z"]
Try this:
<script type="text/javascript">
var testArray = new Array();
testArray[0] = '1';
testArray[1] = '5';
testArray[2] = '9';
testArray[3] = '8';
testArray[4] = '6';
testArray[5] = '2';
var getlength = testArray.length;
testArray.sort(function(a,b){return a - b});
for(var i=0; i<getlength;i++) {
alert(testArray[i]);
}
</script>