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

如何按最早开业日期对含日期数组的国家对象数组排序?

如何按办公室最早开业日期对国家数组排序?

给定一个记录办公室开业/关闭信息的国家对象数组,需按每个国家最早的办公室开业日期从早到晚排序;无开业记录的对象排在最后(可按需调整到首位)。已知每个国家的officeOpened数组已预先按日期排序,只需取第一个元素的日期作为排序依据。

原始数组

const countriesList = [
 { country: 'USA',
 officeOpened: [ {date: '2016-04-01', city: 'Denver'}],
 officeClosed: [ {date: '2016-10-01', city: 'NY'}]
 },
 { country: 'UK',
 officeOpened: [{date: '2023-05-01', city: 'London'}],
 officeClosed: []
 },
 { country: 'China',
 officeOpened: [{date: '2015-01-01', city: 'Shanghai'}],
 officeClosed: []
 },
 { country: 'No-office',
 officeOpened: [],
 officeClosed: []
 },
 { country: 'Many-offices',
 officeOpened: [{date: '2023-04-01', city: 'A'} , {date: '2023-06-01', city: 'B'}],
 officeClosed: []
 }
];

期望输出

const sortedCountriesList = [
 { country: 'China',
 officeOpened: [{date: '2015-01-01', city: 'Shanghai'}],
 officeClosed: []
 },
 { country: 'USA',
 officeOpened: [ {date: '2016-04-01', city: 'Denver'}],
 officeClosed: [ {date: '2016-10-01', city: 'NY'}]
 },
 { country: 'Many-offices',
 officeOpened: [{date: '2023-04-01', city: 'A'} , {date: '2023-06-01', city: 'B'}],
 officeClosed: []
 },
 { country: 'UK',
 officeOpened: [{date: '2023-05-01', city: 'London'}],
 officeClosed: []
 },
 { country: 'No-office',
 officeOpened: [],
 officeClosed: []
 }
];

解决方案

实现思路

利用数组sort()方法自定义排序逻辑:

  • 提取每个国家officeOpened数组的首个日期(数组非空时);
  • 给无开业记录的对象设置极晚日期,确保其排在末尾;
  • 直接用字符串比较日期(YYYY-MM-DD格式可直接按字符顺序判断先后)。

代码实现

const sortedList = [...countriesList].sort((a, b) => {
  // 安全获取首个开业日期,无记录则设为极晚日期
  const aDate = a.officeOpened[0]?.date || '9999-12-31';
  const bDate = b.officeOpened[0]?.date || '9999-12-31';
  
  // 按日期升序排序
  return aDate.localeCompare(bDate);
});

逻辑说明

  • 用扩展运算符[...countriesList]复制原数组,避免修改原数据;
  • 可选链?.防止数组为空时触发报错;
  • 若需将无开业记录的对象排到首位,只需把默认日期改为'0000-01-01';
  • localeCompare()返回的正负值正好匹配sort()方法的排序规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:45:05