You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS排序对象数组时如何跳过"Failed"项,排序后将其追加到末尾

实现方案

你现有代码仅完成了有效成绩项的过滤和排序,没有将标记为Failed的失败项追加回结果,可通过以下两种方式实现需求:


方案1:基于原有逻辑改造(逻辑直观)

拆分有效项和失败项,对有效项排序完成后直接拼接失败项到数组末尾,和你原有写法的兼容性最好:

const markSheet = [{ merit: 1 }, { merit: "Failed" }, { merit: 2 }];
const defineMerit = (markSheet) => {
  // 分别筛选有效成绩项、挂科项
  const validList = markSheet.filter(item => item.merit !== "Failed");
  const failedList = markSheet.filter(item => item.merit === "Failed");
  // 有效项升序排序后拼接挂科项
  return validList.sort((a, b) => a.merit - b.merit).concat(failedList);
};
console.log(defineMerit(markSheet));

方案2:自定义排序规则(无需两次过滤)

直接在sort比较函数中定义优先级,将Failed项的排序权重设为最低,自动排到数组末尾,注意先浅拷贝原数组避免sort直接修改原数据:

const markSheet = [{ merit: 1 }, { merit: "Failed" }, { merit: 2 }];
const defineMerit = (markSheet) => {
  // 浅拷贝避免修改原数组
  return [...markSheet].sort((a, b) => {
    // a是挂科项,排到b后面
    if (a.merit === "Failed") return 1;
    // b是挂科项,a排到b前面
    if (b.merit === "Failed") return -1;
    // 都是有效成绩时按merit数值升序排列
    return a.merit - b.merit;
  });
};
console.log(defineMerit(markSheet));

两种方案运行后都会输出符合预期的结果:

[
  {
    "merit": 1
  },
  {
    "merit": 2
  },
  {
    "merit": "Failed"
  }
]

内容的提问来源于stack exchange,提问作者Fathe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:51:21