Это должно работать:
- Сгенерировать объект с
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; }