我有这个数组:
var arr = [5, 3, 2, 8, 1, 4];
Run Code Online (Sandbox Code Playgroud)
我正在尝试排序奇数值的元素,所以我想要这个
输出:
[1, 3, 2, 8, 5, 4]
Run Code Online (Sandbox Code Playgroud)
如你所见,偶数元素不会改变它们的位置.谁能告诉我我错过了什么?这是我的代码:
function myFunction(array) {
var oddElements = array.reduce((arr, val, index) => {
if (val % 2 !== 0){
arr.push(val);
}
return arr.sort();
}, []);
return oddElements;
}
console.log(myFunction([5, 3, 2, 8, 1, 4]));Run Code Online (Sandbox Code Playgroud)
我知道我可以使用slice将元素添加到数组中,但我仍然坚持如何获取索引并将元素放入数组中.
首先只排序奇数并将其放入数组中oddSorted.然后map通过原始数组中的每个元素检查当前元素是否为奇数,如果奇数将其替换为oddSorted数组中相应的已排序数字.
function sortOddElements(arr){
var oddSorted = arr.filter(ele => ele %2 != 0).sort((a, b) => a - b);
var evenNotSorted = arr.map((ele, idx) => {
if(ele % 2 != 0){
return oddSorted.shift();
}
return ele;
});
return evenNotSorted;
}
var arr = [5, 3, 2, 8, 1, 4];
console.log(sortOddElements(arr));
arr = [5, 3, 2, 8, 1, 4, 11 ];
console.log(sortOddElements(arr));Run Code Online (Sandbox Code Playgroud)
一种选择是跟踪原始数组中奇数的指示,并在进行.reduce排序和排序之后,迭代原始的奇数指标并重新分配,取自排序的奇数数组:
function oddSort(array) {
const oddIndicies = [];
const newArr = array.slice();
const sortedOdd = array.reduce((arr, val, index) => {
if (val % 2 !== 0) {
arr.push(val);
oddIndicies.push(index);
}
return arr;
}, [])
.sort((a, b) => a - b);
while (oddIndicies.length > 0) {
newArr[oddIndicies.shift()] = sortedOdd.shift();
}
return newArr;
}
console.log(oddSort([5, 3, 2, 8, 1, 4]));
console.log(oddSort([5, 3, 2, 8, 1, 4, 11 ]));Run Code Online (Sandbox Code Playgroud)