我有20个随机数(从-10到10)的数组,我需要对它们进行排序。偶数必须在数组前面。像让arr = [-2,3,6,-12,9,2,-4,-11,-8]必须变成arr = [-12,-8,-2,2,4,6,-11 ,3,9] 这是我的代码:
let array = Array(20).fill().map(() => Math.round(Math.random() * 20) - 10);
console.log(array);
function moveEvenToFront(array){
let temp=0;
let a=0;
for(let i=0;i<array.length;i++){
if(array[i] % 2 == 0){
for (let j=i; j>a; j-- ){
temp = array[j-1];
array[j-1] = array[j];
array[j] = temp;
}
a++;
}
}
return array;
}
moveEvenToFront(array);
我尝试了此功能,但不起作用。
答案 0 :(得分:6)
您可以使用.sort()
方法和一个比较器。比较器函数必须首先检查两个参数的“均匀性”。如果它们均为偶数或均为奇数,则将比较结果基于以下值:
array.sort(function(a, b) {
let aeven = !(a % 2), beven = !(b % 2);
if (aeven && !beven) return -1;
if (beven && !aeven) return 1;
return a - b;
});
.sort()
方法的比较器函数从数组传递了两个值。该函数应返回:
答案 1 :(得分:2)
您可以使用一组对偶数和奇数进行排序,然后使用链接方法按值排序。
function sort(array) {
return array.sort((a, b) => Math.abs(a) % 2 - Math.abs(b) % 2 || a - b)
}
console.log(sort(Array.from({ length: 20 }, _ => Math.round(Math.random() * 20) - 10)));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
您最好的选择是使用Array.prototype.sort()
let array = Array(20).fill().map(() => Math.round(Math.random() * 20) - 10);
function moveEvenToFront(array) {
console.log(array);
const tempEven = array.filter(el => {return el % 2 === 0});
const tempOdd = array.filter(el => {return el % 2 !== 0});
const tempEvenSorted = tempEven.sort((a, b) => {
return a - b;
});
const tempOddSorted = tempOdd.sort((a, b) => {
return a - b;
});
return tempEvenSorted.concat(tempOddSorted);
}
console.log(moveEvenToFront(array));
filter()和sort()的组合。首先将偶数过滤,然后将几率过滤到不同的数组中。然后分别对它们进行排序,然后将它们添加在一起。
sort()
函数采用两个参数,它们是原始数组中的元素,并且必须返回负数,正数或零,并基于此创建一个新的排序数组并返回它。