javascript - 按偶数和奇数对数组进行排序

标签 javascript jquery

使用 javascript sort() 方法,我正在尝试对列表进行排序,但排序有一组偶数和奇数。

我尝试的代码在小列表中工作正常,但如果列表变大,它就无法得到正确的结果。这是我的代码。

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; 
  }
});

上面的代码按照接受的结果给我这样的 Ans - [0, 4, 6, 10, 12, 20, 5, 7, 13, 21, 99] 第二个 Ans 是:- [0, 10, 12, 20 ]

这个列表工作正常,但如果我改成这个

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];

但在这种情况下,结果是这样的,这是不合适的。

像这样给我答案

[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] 其奇数和偶数的混合。

它给我不正确的结果。任何建议。

最佳答案

最短的:

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

为了使其适用于负数,我们可以添加 Math.abs() :

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

或者使用 bitwise AND 的更紧凑的变体:

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

最紧凑的版本(ES6):

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

关于javascript - 按偶数和奇数对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13139811/

相关文章:

javascript - JS中如何实现条件渲染?

javascript - Highcharts,将总数据显示为实时流

javascript - 在用户写入时验证表单输入文本

jquery - 如果使用jquery过滤功能表tbody中没有记录,如何显示消息 "no record found."

javascript - 从 ajax 添加元素时 li 操作不起作用

javascript - 将行附加到网格

jquery - 在视口(viewport)中动画计数器

javascript - 在页面上的 div 中显示 HREF 链接

javascript - 如何使用窗口对象(或更好的方法)来创建动态属性名称

javascript - 新的 recaptcha 在(基本上)同一页面中不起作用两次