javascript - 如何在不更改其他元素索引的情况下对数组中的元素进行排序?
问题描述
我有这个数组:
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 将元素添加到数组中,但是我被困在如何获取索引并将元素放入数组中。
解决方案
首先仅对奇数进行排序并将其放入数组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));
推荐阅读
- c# - 简单的条件断点在 Visual Studio 2017 中引发错误
- python - 编码分类变量,如“状态名称”
- php - 如何使用 http_client 测试受 lexik_jwt_authentication 保护的 API?
- java - 具体实现openGL和LWJGL中的局部旋转
- python - Django不显示两个DetailView
- taleo-connect-client - 如何在 Taleo Connect 客户端的投影脚本中编写“If-condition”
- java - 将@Transactional 和调用两个或多个表的逻辑放在哪里?
- ios - SwiftUI:如何将 CoreData 与动态过滤器相加?
- xamarin.forms - Xamarin.Forms 每个平台和设备的不同视图
- networking - iptables,两条规则,我正在努力弄清楚我在这里做什么