如何使用reduce来避免在JavaScript中遍历对象?

rqdpfwrv  于 2023-03-11  发布在  Java
关注(0)|答案(2)|浏览(227)

我有:

const weekdays = eachDay.map((day) => format(day, 'EEE'));

  let ret = { Su: '', Mo: '', Tu: '', We: '', Th: '', Fr: '', Sa: '' };
  weekdays.forEach((day, index) => {
    ret[Object.keys(ret)[index] as DaysOfWeekMui] = day;
  });

我的一个队友说我可以使用一个reduce来避免预定义ret。但是我不知道他的意思。任何帮助都将非常感谢。
先谢了。

mefy6pfw

mefy6pfw1#

我使用reduce主要是当我想把一个列表转换成一个单一的东西。
因此,在您的示例中,您将迭代weekdays列表并将其转换为对象。
要重写现有代码,可以使用reduce,如下所示:

const ret = weekdays.reduce((acc, day) => {
   return { ...acc, [day.slice(0, 2)]: day }
}, /* initial value: */ {})

这段代码将在你的工作日中迭代并调用reduce函数,该函数接收acc,它是最后一次迭代的结果(或者第一次迭代的初始值),以及你正在调用reduce的列表中的item
给定以下列表:["Monday", "Tuesday"]reduce函数的结果将是:

{
  Mo: "Monday",
  Tu: "Tuesday"
}
zyfwsgd6

zyfwsgd62#

Array#reduce有两个参数:回调和初始值。在您的示例中,ret将是您的初始值,并且您的代码可以被重构为:

const ret = weekdays.reduce((obj, day, index) => {
  obj[obj.keys(obj)[index] as DaysOfWeekMui] = day
  return obj
}, { Su: '', Mo: '', Tu: '', We: '', Th: '', Fr: '', Sa: '' })

相关问题