如何用JavaScript的reduce避免预定义对象,替代遍历操作?
使用reduce重构你的星期映射代码
你可以通过定义星期键的数组,结合reduce方法直接构建目标对象,无需预定义带空值的ret。以下是两种等价的实现方式:
方式一:遍历星期键数组
const weekdays = eachDay.map((day) => format(day, 'EEE')); const dayKeys = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']; const ret = dayKeys.reduce((acc, key, index) => { acc[key as DaysOfWeekMui] = weekdays[index]; return acc; }, {} as Record<DaysOfWeekMui, string>);
方式二:遍历格式化后的星期数组
const weekdays = eachDay.map((day) => format(day, 'EEE')); const dayKeys = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']; const ret = weekdays.reduce((acc, day, index) => { const key = dayKeys[index] as DaysOfWeekMui; acc[key] = day; return acc; }, {} as Record<DaysOfWeekMui, string>);
逻辑说明
- 用
dayKeys明确原代码中ret的键顺序,保证和原逻辑完全一致。 reduce的初始值设为空对象,通过类型断言Record<DaysOfWeekMui, string>匹配原ret的类型。- 遍历过程中把
weekdays对应索引的值映射到dayKeys的对应键上,逐步构建完整对象,最终得到结果。
这种重构方式去掉了预定义空值对象的冗余操作,代码更简洁,功能和原代码完全等价。
内容的提问来源于stack exchange,提问作者Shamoon
相关产品推荐
相关产品推荐

