如何实现员工列表按状态+字母排序 活跃记录置顶A-Z、非活跃置底A-Z
实现方案
- 首先封装活跃状态判定逻辑:
- 若
signatureDate为空,直接判定为活跃 - 若
signatureDate不为空,将其转为标准日期对象和当前日期比较,大于等于当前日期则为活跃,否则为非活跃
- 若
- 排序逻辑分两层执行:
- 优先按状态排序:活跃记录全部排在非活跃记录之前
- 状态相同的记录,按
name字段的字母顺序升序排列
const employee = [ { name: 'jpat', signatureDate: '', businessType: 12346, originalFileName: 'hello.xls', agentW9id: 11, fileName: 'hello.xls', agentCode: 0, class: '', status: '', }, { name: 'jcar', signatureDate: '09/10/2021', businessType: 12346, originalFileName: 'test.xls', agentW9id: 12, fileName: 'test.xls', agentCode: 0, class: '', status: '', }, { name: 'Test', signatureDate: '09/23/2020', businessType: 12346, originalFileName: 'test.xls', agentW9id: 13, fileName: 'test.xls', agentCode: 0, class: 'inactive', status: 'Inactive', }, { name: 'newTest', signatureDate: '10/9/2020', businessType: 12346, originalFileName: 'test.xls', agentW9id: 13, fileName: 'test.xls', agentCode: 0, class: 'inactive', status: 'Inactive', }, { name: 'abc', signatureDate: '10/29/2021', businessType: 12346, originalFileName: 'test.xls', agentW9id: 13, fileName: 'test.xls', agentCode: 0, class: '', status: '', }, { name: 'djhfj', signatureDate: '', businessType: 12346, originalFileName: 'test.xls', agentW9id: 13, fileName: 'test.xls', agentCode: 0, class: '', status: '', }, ]; // 判定是否为活跃记录 const isActive = (emp) => { if (!emp.signatureDate) return true; const signDate = new Date(emp.signatureDate); const now = new Date(); // 重置时分秒避免当天的时间精度导致判断误差 now.setHours(0, 0, 0, 0); signDate.setHours(0, 0, 0, 0); return signDate >= now; } // 执行排序 const sortedEmployee = employee.sort((a, b) => { const aActive = isActive(a); const bActive = isActive(b); // 优先按状态排序:活跃在前 if (aActive && !bActive) return -1; if (!aActive && bActive) return 1; // 状态相同按名称升序排列 return a.name.localeCompare(b.name); }); console.log(sortedEmployee);
内容的提问来源于stack exchange,提问作者Bhrungarajni
相关产品推荐
相关产品推荐

