最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Sorting array by even and odd numbers - Stack Overflow

programmeradmin3浏览0评论

Using javascript sort() method, I am trying to do sorting a list but sorting have in a group of even numbers and odd numbers.

The code which I tried is working fine with small list but if the list bees big its not getting me proper result. Here is my code.

var n = [10,20,21,4,5,6,7,99,0,12,13];
//var n = [10,20,0,12];
n.sort(function(a,b){
 if (a % 2 !=b % 2 ){
   return a%2;
  }else {
    return a - b; 
  }
});

The above code gives me as per accepted result like this Ans - [0, 4, 6, 10, 12, 20, 5, 7, 13, 21, 99] and the second Ans is:- [0, 10, 12, 20]

Working fine with this lists but if I changed into this

var n = [10,20,21,4,5,6,7,99,0,12,13,10,20,21,4,5,6,7,99,0,12,13,10,20,21,4,5,6,7,99,0,12,13,10,20,21,4,5,6,7,99,0,12,13];

But in this case the result is something like this which is not proper.

Giving me Ans like this

[0, 0, 0, 0, 4, 4, 4, 4, 6, 6, 6, 6, 10, 10, 10, 10, 12, 5, 12, 5, 12, 5, 20, 20, 20, 20, 5, 12, 7, 7, 7, 7, 13, 13, 13, 13, 21, 21, 21, 21, 99, 99, 99, 99] its a mixing of odd and even numbers.

Its giving me not proper result. Any suggestion.

Using javascript sort() method, I am trying to do sorting a list but sorting have in a group of even numbers and odd numbers.

The code which I tried is working fine with small list but if the list bees big its not getting me proper result. Here is my code.

var n = [10,20,21,4,5,6,7,99,0,12,13];
//var n = [10,20,0,12];
n.sort(function(a,b){
 if (a % 2 !=b % 2 ){
   return a%2;
  }else {
    return a - b; 
  }
});

The above code gives me as per accepted result like this Ans - [0, 4, 6, 10, 12, 20, 5, 7, 13, 21, 99] and the second Ans is:- [0, 10, 12, 20]

Working fine with this lists but if I changed into this

var n = [10,20,21,4,5,6,7,99,0,12,13,10,20,21,4,5,6,7,99,0,12,13,10,20,21,4,5,6,7,99,0,12,13,10,20,21,4,5,6,7,99,0,12,13];

But in this case the result is something like this which is not proper.

Giving me Ans like this

[0, 0, 0, 0, 4, 4, 4, 4, 6, 6, 6, 6, 10, 10, 10, 10, 12, 5, 12, 5, 12, 5, 20, 20, 20, 20, 5, 12, 7, 7, 7, 7, 13, 13, 13, 13, 21, 21, 21, 21, 99, 99, 99, 99] its a mixing of odd and even numbers.

Its giving me not proper result. Any suggestion.

Share Improve this question edited Oct 30, 2012 at 13:30 VisioN 145k34 gold badges286 silver badges289 bronze badges asked Oct 30, 2012 at 13:14 SoarabhSoarabh 2,9509 gold badges41 silver badges57 bronze badges 2
  • 3 Please define, "Not a proper result" – SpYk3HH Commented Oct 30, 2012 at 13:16
  • 3 Please add the desired output to the question body. – VisioN Commented Oct 30, 2012 at 13:16
Add a ment  | 

3 Answers 3

Reset to default 15

The short of the shortest:

n.sort(function(a, b) {
    return a % 2 - b % 2 || a - b;
});

To make it work with negative numbers we can add Math.abs():

n.sort(function(a, b) {
    return Math.abs(a % 2) - Math.abs(b % 2) || a - b;
});

Or even more pact variant using bitwise AND:

n.sort(function(a, b) {
    return (a & 1) - (b & 1) || a - b;
});

The most pact version (ES6):

n.sort((a, b) => (a & 1) - (b & 1) || a - b);

Change the code as follows:

n.sort(function(a,b){
 if (a % 2 != b % 2 ){
   return a%2;
  }else {
      return (a - b) > 0 ? 1 : -1; 
  }
});

Working sample is here.

Edit:

n.sort(function(a,b){
 if (a % 2 != b % 2 ){
     return a%2 == 0 ? -1 : 1; // this is the fix :)
  }else {
      return (a - b) > 0 ? 1 : -1; 
  }
});

Edit 2: I've modifed the code for negative numbers. See working sample.

n.sort(function(a,b){
 if (a % 2 != b % 2 ){
   return Math.abs(a)%2;
  }else {
      return a > b ? 1 : -1; 
  }
});

My try:

fiddle

var n = [10,20,21,4,5,6,7,99,0,-12,12,13,-45,10,20,21,-13,4,5,6,7,99,0,12,13,10,-99,20,21,4,5,6,7,99,0,12,13,10,20,21,4,5,6,7,99,-15,-18,0,12,13];

function sort(a, b) {
    if (!(a % 2) && !(b % 2)) {
        return a > b ? 1 : -1;
    }
    if ((a % 2) && (b % 2)) {
        return a > b ? 1 : -1;
    }
    if ((a % 2) && !(b % 2)) {
        return 1;
    }
    return -1;
}
console.log(n.sort(sort));​
发布评论

评论列表(0)

  1. 暂无评论