仅使用JavaScript sort方法实现特定规则数组排序求助
仅使用sort方法实现分组升序排序
给定数组:
const arr = [1,100,3,5,7,3,2,7, -1];
要求仅用sort方法实现:先升序排列所有>=5的元素,再升序排列所有<5的元素,期望结果为[5, 7, 7, 100, -1, 1, 2, 3, 3]。
正确实现代码
arr.sort((a, b) => { const aIsGE5 = a >= 5; const bIsGE5 = b >= 5; // 两者都属于>=5的组,按升序排列 if (aIsGE5 && bIsGE5) { return a - b; } // 两者都属于<5的组,按升序排列 else if (!aIsGE5 && !bIsGE5) { return a - b; } // 跨组情况:>=5的元素排在<5的元素前面 else { return aIsGE5 ? -1 : 1; } });
错误代码分析
你之前尝试的(a+5) > b ? 1 : -1逻辑完全偏离需求:
- 这个逻辑没有区分元素所属的分组,只是通过
a+5和b的大小关系排序,无法实现"先>=5组、后<5组"的分组规则,自然得不到正确结果。
逻辑说明
sort方法的回调函数通过返回值控制元素顺序:
- 返回负数:a排在b前面
- 返回正数:b排在a前面
- 返回0:顺序不变
我们的回调逻辑分三层:
- 同组内(都>=5或都<5):按常规升序(
a-b)排列 - 跨组时:强制让>=5的元素排在<5的元素之前
内容的提问来源于stack exchange,提问作者Kihoon BAE
相关产品推荐
相关产品推荐

