如何对数组中的偶数升序和奇数降序进行排序?

时间:2019-04-18 15:27:23

标签: javascript arrays

我不知道如何在偶数右边按降序对奇数进行排序。我有点卡在这里,我知道我错过了一些东西。

我的输出是这样的:[2, 4, 6, 8, 10, 1, 3, 5, 7, 9]

应该是这样的:[2, 4, 6, 8, 10, 9, 7, 5, 3, 1]

var n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
n.sort(function(a, b) {
  return a % 2 - b % 2 || b % 2 - a % 2;
});
console.log(n);

5 个答案:

答案 0 :(得分:3)

一个琐碎且非常昂贵的解决方案是构建两个数组,对它们进行排序,然后将它们连接起来,但是您可以将两个测试结合起来并按如下方式进行排序:

arr.sort((a,b)=> (a%2-b%2) || (a%2 ? b-a : a-b))

如您所见,分层排序的模式只是

arr.sort(compareA || compareB) 

您可以概括出更多条件。

let arr = Array.from({length:10}, (_,i)=>i+1)
arr.sort((a,b)=> (a%2-b%2) || (a%2 ? b-a : a-b))
console.log(arr)

答案 1 :(得分:1)

您可以使用filter()获取不同的偶数和奇数数组,然后对它们进行排序和合并,然后使用Spread运算符

var n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let odd = n.filter(x => x % 2).sort((a,b) => b-a);

let even = n.filter(x => !(x % 2) ).sort((a,b) => a-b);

let res = [...even,...odd]

console.log(res);

答案 2 :(得分:1)

您可以过滤几率和偶数,并对它们进行排序,最后将两个数组连接起来。

let n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let odds = n.filter((a) => a % 2 !== 0).sort((a, b) => b - a);
let even = n.filter((a) => a % 2 === 0).sort((a, b) => a - b);
let sorted = even.concat(odds);
console.log(sorted);
.as-console-wrapper { min-height: 100%; }

答案 3 :(得分:0)

您是否尝试过将数组拆分为两个数组(一个为偶数,一个为奇数),然后根据需要对每个数组进行排序,并使用散列运算符[... even,... odd]将它们重新组合在一起

var n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var even = n.filter(a => a % 2 == 0).sort();
var odd = n.filter(a => a % 2 != 0).sort().reverse();
var numbers = [...even, ...odd];

答案 4 :(得分:0)

您可以分离两个数组,并通过散布运算符合并。

let n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let odd  = n.filter (v => v % 2);
odd.sort((a,b) => b-a);
//console.log(odd)
let even = n.filter (v => !(v % 2));
even.sort((a,b) => a-b);
//console.log(even);

console.log([...even,...odd]);

var n = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
odd  = n.filter (v => v % 2);
odd.sort((a,b) => b-a);
//console.log(odd)
even = n.filter (v => !(v % 2));
even.sort((a,b) => a-b);
//console.log(even);

console.log([...even,...odd]);