Angular 17中如何基于指定数字一步实现数组自定义排序?
一步实现自定义数字数组排序
完全可以通过Array.sort()的比较函数一步完成你要的排序逻辑,不需要拆分、过滤再合并。
正确的排序实现代码
const sortBasedValue = 7; const items: Array<number> = [2,6,4,8,1,9,3,5,10]; this.sortedItems = items.sort((a, b) => { // 判断a、b是否属于小于等于基准值的分组 const aInLower = a <= sortBasedValue; const bInLower = b <= sortBasedValue; // 同属低分组:降序排列 if (aInLower && bInLower) { return b - a; } // 同属高分组:升序排列 if (!aInLower && !bInLower) { return a - b; } // a在低分组、b在高分组:a排前面 if (aInLower) { return -1; } // b在低分组、a在高分组:b排前面 return 1; });
逻辑说明
- 先判定两个元素是否属于「小于等于基准值」的分组
- 同组内按要求排序:低分组降序(
b - a),高分组升序(a - b) - 不同组时,低分组元素直接排在高分组元素之前
验证结果
- 基准值为7时,输出:
[6,5,4,3,2,1,8,9,10] - 基准值为4时,输出:
[4,3,2,1,5,6,8,9,10]
补充提示
Array.sort()是原地排序,会修改原数组。如果不想改动原数组,可先复制再排序:
this.sortedItems = [...items].sort(/* 上述比较函数 */);
内容的提问来源于stack exchange,提问作者Ahmed Abdulkafy
相关产品推荐
相关产品推荐

