Reputation: 2917
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");
Upvotes: 5
Views: 625
Reputation: 149
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>
Upvotes: 1
Reputation: 150030
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"]
Upvotes: 1
Reputation: 26861
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) );
Upvotes: 1
Reputation: 490233
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);
});
Upvotes: 4
Reputation: 4097
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>
Upvotes: 0
Reputation: 26574
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"
Upvotes: 1
Reputation: 21979
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(" : ");
Upvotes: 1
Reputation: 62392
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"
Upvotes: 1
Reputation: 66663
Use array.sort()
built-in JS function. Documentation here: http://www.w3schools.com/jsref/jsref_sort.asp
Upvotes: 2