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

问题描述 投票:0回答:2

我有:

  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
。但我不确定他的意思。任何帮助将不胜感激。

提前致谢。

javascript arrays reduce
2个回答
0
投票

当我想将事物列表转换为单个事物时,我主要使用

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"
}

-1
投票

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: '' })
© www.soinside.com 2019 - 2024. All rights reserved.