用于循环工作,但当我用JavaScript转换为reduce函数时出错



这正在工作:

  const messagesOrganised = {};
  for (const msg of messagesGroupedByName) {
    if (!messagesOrganised[msg.groupBy]) {
      messagesOrganised[msg.groupBy] = [msg];
    } else {
      messagesOrganised[msg.groupBy].push(msg);
    }
  }

但当我尝试将其转换为使用reduce函数时,我得到了一个错误:

  const messagesOrganised = messagesGroupedByName.reduce((acc, msg) => {
    if (!acc[msg.groupBy]) {
      acc[msg.groupBy] = [msg];
    } else {
      acc[msg.groupBy].push(msg);
    }
  }, {});

TypeError:无法读取未定义的属性"Name">

const messagesOrganised = messagesGroupedByName.reduce((acc, msg) => {
  if (!acc[msg.groupBy]) {
    acc[msg.groupBy] = [msg];
  } else {
    acc[msg.groupBy].push(msg);
  }
  return acc; // return the working object
}, {});

reduce不会自动跟踪您的工作对象。您需要在reduce的每次迭代中返回一些东西,通常是您的工作对象。某些东西将被传递到下一次迭代。

请参阅Array.reduce()的工作原理:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#How_reduce((_works

const messagesOrganised = messagesGroupedByName.reduce((acc, msg) => {
  if (!acc[msg.groupBy]) {
    acc[msg.groupBy] = [msg];
  } else {
    acc[msg.groupBy].push(msg);
  }
  return acc;  // <<<< You need to return accumulated value from callback
});

如果这有帮助,请告诉我。

最新更新