Хранить в массиве последний элемент с даты и из каждой категории - PullRequest
1 голос
/ 06 мая 2020

В массиве у меня есть несколько элементов с идентификатором местоположения и датой его создания в CMS (created_on).

Array(50)
0:
created_on: "2020-04-22 07:10:00"
location: {id: "2"}

1:
created_on: "2020-04-22 07:15:00"
location: {id: "3"}

2:
created_on: "2020-04-22 07:13:00"
location: {id: "1"}

3:
created_on: "2020-04-22 07:12:00"
location: {id: "1"}

etc...

Как сохранить только дата последнего фото (из new Date()) и из каждого места? Это означает, что в каждом месте будет только одна фотография, которая является ближайшей по дате.

Я имею в виду удалить элементы, не соответствующие этим двум условиям, поэтому, если есть 3 места, оставьте только 3 фотографии.

1 Ответ

3 голосов
/ 06 мая 2020

Это должно работать:

  • Сгенерировать объект с myPics.reduce()
  • Каждая итерация, проверьте, является ли дата более поздней, чем текущая, сохраненная в объекте для этого идентификатора местоположения
  • Если дата более поздняя, ​​перезаписать текущую, сохраненную в объекте
  • Если в идентификаторе местоположения (первый для этого местоположения) нет элемента, сохраните этот элемент в объекте
  • Преобразуйте этот объект в массив с Object.values()

const myPics = [
  {
    created_on: "2020-04-22 07:10:00",
    id: "1",
    location: {id: "2"}
  },
  {
    created_on: "2020-04-22 07:15:00",
    id: "2",
    location: {id: "3"}
  },
  {
    created_on: "2020-04-22 07:13:00",
    id: "3",
    location: {id: "1"}
  },
  {
    created_on: "2020-04-22 07:12:00",
    id: "4",
    location: {id: "1"}
  },
  {
    created_on: "2020-04-22 09:10:00",
    id: "5",
    location: {id: "2"}
  }
];

const myLatestPics = Object.values(myPics.reduce((aggObj, item) => {
  if (aggObj.hasOwnProperty(item.location.id)){
    if (new Date(aggObj[item.location.id].created_on) < new Date(item.created_on)){
      aggObj[item.location.id] = item;
    }
  } else {
    aggObj[item.location.id] = item;
  }
  return aggObj;
}, {}));

console.log(myLatestPics);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...