首页 > 解决方案 > 如何在不更改其他元素索引的情况下对数组中的元素进行排序?

问题描述

我有这个数组:

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

我试图只对奇数值的元素进行排序,所以我想要这个

输出:

[1, 3, 2, 8, 5, 4]

如您所见,偶数元素不会改变它们的位置。谁能告诉我我错过了什么?这是我的代码:

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]));

我知道我可以使用 slice 将元素添加到数组中,但是我被困在如何获取索引并将元素放入数组中。

标签: javascript

解决方案


首先仅对奇数进行排序并将其放入数组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));


推荐阅读