如何将星期缩写转换为对应数字?寻求更优实现方案
星期缩写转数字串的更优实现方案
针对你需要将{id:1, weeks: 'Mon,Tue,Thu'}转换为{id:1, weeks:'124'}的需求,这里提供几种更简洁高效的实现方式:
方法一:对象映射+链式数组操作(推荐)
这种方式通过预定义星期与数字的映射表,配合数组的split、map、join方法完成转换,代码直观易读,维护成本低,查找映射的时间复杂度为O(1)。
const originalObj = { id: 1, weeks: 'Mon,Tue,Thu' }; // 定义星期到对应数字的映射表 const weekToNumMap = { Mon: '1', Tue: '2', Wed: '3', Thu: '4', Fri: '5', Sat: '6', Sun: '7' }; // 生成转换后的对象 const resultObj = { ...originalObj, weeks: originalObj.weeks.split(',').map(day => weekToNumMap[day]).join('') }; console.log(resultObj); // 输出:{ id: 1, weeks: '124' }
方法二:数组索引映射
如果星期的顺序是固定的,可以利用数组索引+1来获取对应数字,代码更精简,但查找索引的时间复杂度为O(n)(n为星期数量,这里仅7个,性能影响可忽略)。
const originalObj = { id: 1, weeks: 'Mon,Tue,Thu' }; const weekOrder = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']; const resultObj = { ...originalObj, weeks: originalObj.weeks.split(',').map(day => weekOrder.indexOf(day) + 1).join('') }; console.log(resultObj); // 输出:{ id: 1, weeks: '124' }
方法三:Map结构映射
和对象映射逻辑类似,Map结构支持更多类型的键,适合后续可能扩展的场景,用法和对象映射几乎一致。
const originalObj = { id: 1, weeks: 'Mon,Tue,Thu' }; const weekMap = new Map([ ['Mon', '1'], ['Tue', '2'], ['Wed', '3'], ['Thu', '4'], ['Fri', '5'], ['Sat', '6'], ['Sun', '7'] ]); const resultObj = { ...originalObj, weeks: originalObj.weeks.split(',').map(day => weekMap.get(day)).join('') };
总结
优先推荐方法一,它在可读性、维护性和性能上都表现出色,后续如果需要调整星期与数字的对应关系,只需修改映射表即可,无需改动转换逻辑。
内容的提问来源于stack exchange,提问作者Honey Singh
相关产品推荐
相关产品推荐

