如何按升序对奇数数组进行排序,但将偶数保持在其位置?

use*_*006 3 javascript arrays sorting modulus

我想只排序奇数而不移动偶数.例如,当我写:

sortArray([5, 3, 2, 8, 1, 4])
Run Code Online (Sandbox Code Playgroud)

预期的结果是:

[1, 3, 2, 8, 5, 4]
Run Code Online (Sandbox Code Playgroud)

我是JavaScript的新手,我在互联网上遇到了让我感到困惑的挑战.我通常不会在互联网上发帖要求解决方案,但我已经尝试了几个小时,我想用JavaScript学习这个概念.

挑战表明:

你有一系列数字.你的任务是对升序奇数进行排序,但偶数必须在他们的位置.零不是奇数,你不需要移动它.如果您有一个空数组,则需要返回它.

这是我的代码到目前为止,请放轻松我,我正处于编程的开始阶段.

function sortArray(array) {
  let oddNums = [];
  for(let i = 0; i < array.length; i++) {
    if(array[i] % 2 !== 0) {
      oddNums.push(array[i]);
    }
  }
  oddNums = oddNums.sort((a,b)=> a-b);
  array.concat(oddNums);
  array = array.sort((a,b) => a-b);
  return array;
}
Run Code Online (Sandbox Code Playgroud)

CRi*_*ice 6

这是一个主要使用内置数组方法的解决方案。获取仅包含赔率的列表,对其进行排序,然后映射到原始项,如果项目为奇数,则将每个项目替换为第一个排序的奇数,如果为偶数,则替换为自身:

const array = [5, 3, 2, 8, 1, 4] // to: [1, 3, 2, 8, 5, 4]

function sortOddsOnly(arr) {
    const odds = arr
        .filter(x => x%2)
        .sort((a, b) => a - b);
        
    return arr
        .map(x => x%2 ? odds.shift() : x);
}

console.log(sortOddsOnly(array));
Run Code Online (Sandbox Code Playgroud)


Nin*_*olz 5

您可以为奇数索引获取辅助数组,为奇数索引获取另一个数组,对它们进行排序并将它们应用于先前存储的原始数组索引.

var array = [5, 3, 2, 8, 1, 4],
    indices = [];

array
    .filter((v, i) => v % 2 && indices.push(i))
    .sort((a, b) => a - b)
    .forEach((v, i) => array[indices[i]] = v);

console.log(array);
Run Code Online (Sandbox Code Playgroud)