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
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"]
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"
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"
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>
.sort()? Is the idea to do a numeric sort by the number first, with secondary sort by the following letter? Or just do a standard string sort on the entire text? That is, how do you want to sort["1,a", "11,a", "2,b", "2,c"]