如何从当前工作日开始对TypeScript Map进行排序?
解决方案:从当前工作日开始循环排序销售额数据
步骤说明
要实现从当前工作日开始的循环排序,核心是先确定一周的固定顺序,再根据当前日的位置将数据拆分为两部分拼接:当前日及之后的日期在前,之前的日期在后。
实现代码(TypeScript)
首先定义一周的标准顺序(确保和你的Map键格式一致,均为英文首字母大写的星期全称):
// 定义一周的固定顺序,用于定位日期位置 const weekOrder = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; // 示例Map数据 const salesMap = new Map<string, number>([ ['Friday', 0], ['Monday', 0], ['Saturday', 0], ['Sunday', 0], ['Thursday', 0], ['Tuesday', 0], ['Wednesday', 0], ]); // 获取当前工作日的字符串(格式与Map键一致) const currentDay = new Date().toLocaleDateString('en-US', { weekday: 'long' }); // 将Map转换为对象数组(也可直接处理Map的键值对) const salesArray = Array.from(salesMap.entries()).map(([day, sales]) => ({ day, sales })); // 排序函数:从当前日开始循环排列 const sortFromCurrentDay = (data: { day: string; sales: number }[], currentDay: string) => { // 先按标准星期顺序排序,确保基础顺序正确 const sortedByWeek = [...data].sort((a, b) => weekOrder.indexOf(a.day) - weekOrder.indexOf(b.day)); // 找到当前日在排序后数组中的位置 const splitIndex = sortedByWeek.findIndex(item => item.day === currentDay); // 拆分并拼接:当前日及之后的部分 + 当前日之前的部分 return [...sortedByWeek.slice(splitIndex), ...sortedByWeek.slice(0, splitIndex)]; }; // 执行排序 const sortedSales = sortFromCurrentDay(salesArray, currentDay); // 输出结果示例(当前日为Thursday时) console.log(sortedSales); // 输出: // [ // { day: 'Thursday', sales: 0 }, // { day: 'Friday', sales: 0 }, // { day: 'Saturday', sales: 0 }, // { day: 'Sunday', sales: 0 }, // { day: 'Monday', sales: 0 }, // { day: 'Tuesday', sales: 0 }, // { day: 'Wednesday', sales: 0 } // ]
关键细节
- 日期格式匹配:确保
currentDay的格式和Map中的键完全一致(比如都是首字母大写的英文全称),避免索引查找失败。 - 容错处理:如果
currentDay不在weekOrder中,函数会返回原数组,可根据需求添加错误提示。 - 性能优化:如果数据量较大,可预先创建星期到索引的映射对象(比如
const dayToIndex = new Map(weekOrder.map((day, idx) => [day, idx]))),替代多次调用indexOf提升效率。
内容的提问来源于stack exchange,提问作者Adam Howard
相关产品推荐
相关产品推荐

