对数字进行排序,以使偶数在前面

时间:2018-12-23 17:29:00

标签: javascript arrays

我有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);

我尝试了此功能,但不起作用。

3 个答案:

答案 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()函数采用两个参数,它们是原始数组中的元素,并且必须返回负数,正数或零,并基于此创建一个新的排序数组并返回它。