Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何对数组中的偶数升序和奇数降序排序?_Javascript_Arrays - Fatal编程技术网

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

Javascript 如何对数组中的偶数升序和奇数降序排序?,javascript,arrays,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、 排序(功能(a、b){ 返回a%2-b%2 | | b%2-a%2; }); 控制台日志(n)是否尝试将数组拆分为两个数组(一个为偶数,一个为奇数),然后根据需要对每个数组进行排序,并使用扩展运算符[…偶数,…奇数]将它们重新连接

我不知道如何将奇数按降序排列在偶数的右边。我有点困在这里,我知道我错过了什么

我的输出是这样的:
[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、 排序(功能(a、b){
返回a%2-b%2 | | b%2-a%2;
});

控制台日志(n)是否尝试将数组拆分为两个数组(一个为偶数,一个为奇数),然后根据需要对每个数组进行排序,并使用扩展运算符[…偶数,…奇数]将它们重新连接起来

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

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

arr.sort((a,b)=> (a%2-b%2) || (a%2 ? b-a : a-b))
如您所见,分层排序的模式只是

arr.sort(compareA || compareB) 
你可以把它推广到更多的情况

让arr=Array.from({length:10},(u,i)=>i+1)
arr.sort((a,b)=>(a%2-b%2)| |(a%2?b-a:a-b))
console.log(arr)
您可以使用
filter()
获取不同的偶数和奇数数组,然后对它们进行排序并加入,然后使用扩展运算符

var n=[1,2,3,4,5,6,7,8,9,10];
设奇数=n.filter(x=>x%2).sort((a,b)=>b-a);
设偶数=n.filter(x=>!(x%2)).sort((a,b)=>a-b);
设res=[…偶数,…奇数]

控制台日志(res)您可以过滤赔率和偶数,并对它们进行排序,最后连接两个数组

设n=[1,2,3,4,5,6,7,8,9,10];
让赔率=n.filter((a)=>a%2!==0)排序((a,b)=>b-a);
设偶数=n.filter((a)=>a%2==0.sort((a,b)=>a-b);
让排序=偶数.concat(赔率);
控制台日志(已排序)

。作为控制台包装{min height:100%;}
您可以分离两个数组,并通过spread运算符合并

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];
奇数=n.过滤器(v=>v%2);
奇数排序((a,b)=>b-a);
//console.log(奇数)
偶数=n.过滤器(v=>!(v%2));
偶数排序((a,b)=>a-b);
//console.log(偶数);

log([…偶数,…奇数])这比必要的成本更高代码无法提供正确的输出。奇数应该按降序排列,你可能误解了。请看OP所说的评论。OP:类似于[2,4,6,8,10,9,7,5,3,1]——几率也必须下降..非常感谢,这对我很有效,我知道我做错了什么--你在声明隐式全局变量。我的答案和你的答案也没有区别。我想你没有看到我的答案。我更新了答案,当然在我取消否决票之前我不知道你的答案。但重复答案并不好。我不是说你抄袭了我的。你不需要。但给出一个与其他答案完全相同的答案并不太好。在你的代码段中使用
let
当我在代码段中编写代码时,它是全屏的,我看不到你的答案,你不应该这样想,我理解没有问题。