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

如何先按DOB排序对象数组,日期相同时按importance从Low到High排序?

实现数组双字段排序:日期优先+自定义优先级排序

首先得提个小细节:你的初始代码里用了a.dueDate.value,但原数组里的日期字段是DOB,得先把这个字段名对应上,不然排序逻辑会失效~

针对你要的「先按DOB排序,同日期下按importance从Low到High排列」的需求,其实可以利用你已经定义的importanceOrder数组来实现优先级的比较,具体思路如下:

核心逻辑

  1. 日期排序:把字符串格式的DOB转成Date对象来比较,比直接字符串对比更可靠(避免不同日期格式导致的排序错误);
  2. 优先级排序:当日期相同时,通过importanceOrder数组获取每个importance对应的索引值——索引越小,优先级越高(因为你要Low在前),然后比较两个索引的差值即可。

完整实现代码

先修正你初始代码里的小问题,再补全else块的逻辑:

// 注意:原数组里的importance有'Medium',所以把你初始代码里的'Normal'改成'Medium'
const importanceOrder = ['Low', 'Medium', 'High'];
const arr = [
 { name : 'Gary', DOB : '01/01/1980', importance: 'High' },
 { name : 'Bill', DOB : '01/01/1985', importance: 'High' },
 { name : 'Joe', DOB : '01/01/1981', importance: 'Medium' },
 { name : 'Phillip', DOB : '01/01/1981', importance: 'High' },
 { name : 'Ed', DOB : '01/01/1980', importance: 'Low' },
 { name : 'Nix', DOB : '01/01/1980', importance: 'High' },
 { name : 'Pat', DOB : '01/01/1980', importance: 'Low' }
];

arr.sort(function(a, b) {
  // 将日期字符串转为Date对象,确保比较准确
  const dateA = new Date(a.DOB);
  const dateB = new Date(b.DOB);

  // 先比较日期
  if (dateA.getTime() !== dateB.getTime()) {
    // Date对象直接相减会返回时间戳差值,负数表示dateA更早,排在前面
    return dateA - dateB;
  } else {
    // 日期相同时,比较importance的优先级
    const rankA = importanceOrder.indexOf(a.importance);
    const rankB = importanceOrder.indexOf(b.importance);
    // 索引小的优先级高,所以返回差值实现升序排列(Low→Medium→High)
    return rankA - rankB;
  }
});

性能优化建议

如果你的数组很大,indexOf每次都会遍历importanceOrder数组,效率会稍低。可以把优先级映射成一个对象,用键值对的方式直接获取排名,查找效率是O(1):

const importanceRank = {
  'Low': 0,
  'Medium': 1,
  'High': 2
};

arr.sort(function(a, b) {
  const dateA = new Date(a.DOB);
  const dateB = new Date(b.DOB);

  if (dateA.getTime() !== dateB.getTime()) {
    return dateA - dateB;
  } else {
    return importanceRank[a.importance] - importanceRank[b.importance];
  }
});

验证排序结果

运行代码后,DOB为01/01/1980的条目会按Ed(Low)→Pat(Low)→Gary(High)→Nix(High)的顺序排列,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:17:29