使用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]
混合了奇数和偶数。
它给了我不正确的结果。任何建议。
答案 0 :(得分:11)
最短的时间:
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;
});
答案 1 :(得分:1)
按如下方式更改代码:
n.sort(function(a,b){
if (a % 2 != b % 2 ){
return a%2;
}else {
return (a - b) > 0 ? 1 : -1;
}
});
工作样本为here。
编辑:
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;
}
});
编辑2: 我修改了负数的代码。请参阅working sample。
n.sort(function(a,b){
if (a % 2 != b % 2 ){
return Math.abs(a)%2;
}else {
return a > b ? 1 : -1;
}
});
答案 2 :(得分:0)
我的尝试:
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));