Anish
Anish

Reputation: 2917

How to sort an array in JavaScript

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

Answers (9)

kamal
kamal

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

nnnnnn
nnnnnn

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

Tudor Constantin
Tudor Constantin

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

alex
alex

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

Sanjeev Chauhan
Sanjeev Chauhan

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

Rich Adams
Rich Adams

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

ariefbayu
ariefbayu

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

jondavidjohn
jondavidjohn

Reputation: 62392

http://jsfiddle.net/Dht33/

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

techfoobar
techfoobar

Reputation: 66663

Use array.sort() built-in JS function. Documentation here: http://www.w3schools.com/jsref/jsref_sort.asp

Upvotes: 2

Related Questions