Как использовать карту / foreach с соседними предметами? - PullRequest
0 голосов
/ 31 декабря 2018

Возникли проблемы при сравнении двух одинаковых значений в массиве объектов.

Например, у меня есть следующий массив объектов:

let Activities = [
  {
    "_id": "r6cDEGoW6v6WCWR2M",
    createdAt: ISODate("2018-12-29T21:43:49.723Z"),
    comment: 'my comment 1'
  },
  {
    "_id": "JaMSF88t8o5tMC8GM",
    createdAt: ISODate("2018-12-30T21:43:49.723Z"),
    comment: 'my comment 2'
  }
]

Я хочу проверить, еслидата создания на Activity[0] на день меньше, чем на Activity[1] (что это такое), и если да, то просто console.log ("Вчера");

Я пытался использовать Map и Foreachно не знаю, как получить доступ к смежным элементам в массиве сразу, чтобы сравнить их, так как ни один из этих методов не требует параметра индекса для итерации.Если это имеет смысл?

1 Ответ

0 голосов
/ 31 декабря 2018

forEach может принимать другие параметры, включая индекс и исходный массив.Я должен был заглушить ISODate и сделать сравнение строк, но это должно дать вам правильное представление.

const ISODate = date => date;

let activities = [
  {
    "_id": "r6cDEGoW6v6WCWR2M",
    createdAt: ISODate("2018-12-29T21:43:49.723Z"),
    comment: 'my comment 1'
  },
  {
    "_id": "JaMSF88t8o5tMC8GM",
    createdAt: ISODate("2018-12-30T21:43:49.723Z"),
    comment: 'my comment 2'
  }
];

activities.forEach((activity, index, src) => {
  if (index < src.length - 1) {
    const nextActivity = src[index + 1];
    if (activity.createdAt < nextActivity.createdAt) {
      console.log('yesterday');
    }
  }
});

Если это для реакции, то может быть лучше запустить ваш массив с помощью функции array::map.Нечто похожее на:

activities.map((activity, index, src) => {
  let dateChange;
  if (index < src.length - 1) {
    const nextActivity = src[index + 1];
    dateChange = activity.createdAt < nextActivity.createdAt;
  }
  return (
    <Fragment key={ `${activity.createdAt}-${index}` }>
      <Activity { ...activity }/>
      { dateChange && <Divider />}
    </Fragment>
  );
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...