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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:32:17