Problem
- You have an array of numbers.
- Your task is to sort ascending odd numbers but even numbers must be on their places.
- 홀수를 오름차순으로 정렬한다.
- 하지만 짝수는 그 자리에 있어야 한다.
- Zero isn’t an odd number and you don’t need to move it.
- If you have an empty array, you need to return it.
Solution 01
function sortOdd(arr) {
let odd = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] % 2 !== 0) {
odd.push(arr[i]);
}
}
odd.sort((a, b) => a - b);
for (let j = 0; j < arr.length; j++) {
if (arr[j] % 2 !== 0) {
arr[j] = odd.shift();
}
}
return arr;
}
sortOdd([]); // []
sortOdd([3, 2, 1, 4]); // [1, 2, 3, 4]
sortOdd([1, 2, 3, 4]); // [1, 2, 3, 4]
Solution 02
function sortOdd(arr) {
const odd = arr.filter(i => i % 2 !== 0).sort((a, b) => a - b);
return arr.map(i => (i % 2 !== 0 ? odd.shift() : i));
}
sortOdd([]); // []
sortOdd([3, 2, 1, 4]); // [1, 2, 3, 4]
sortOdd([1, 2, 3, 4]); // [1, 2, 3, 4]