Для работы цикла, но ошибки, когда я конвертирую, чтобы уменьшить функцию с JavaScript - PullRequest
0 голосов
/ 13 ноября 2018

Это работает:

  const messagesOrganised = {};

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

Но когда я пытаюсь преобразовать его в функцию уменьшения, я получаю сообщение об ошибке:

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

TypeError: Не удается прочитать свойство«Имя» из неопределенного

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018
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, обычно это ваш рабочий объект.Это что-то будет передано на следующую итерацию.

0 голосов
/ 13 ноября 2018

Пожалуйста, обратитесь к тому, как работает 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
});

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...