Я бью головой об этой проблеме и хотел бы получить некоторые указания.
Мне нужно выбрать элемент с наивысшим currentSeason.endDate
для каждого competition.id
, которые одинаковы.
Вход:
[
{
"competition": {
"id": 2015,
},
"currentSeason": {
"id": 177, "endDate": "2019-05-25",
},
"id": "5b8e6ba74178bc111c9b649e"
},
{
"competition": {
"id": 2015,
},
"currentSeason": {
"id": 499, "endDate": "2020-05-31",
},
"id": "5d4191576a32da53f0a57c70"
},
{
"competition": {
"id": 2084,
},
"currentSeason": {
"id": 508, "endDate": "2020-05-30",
},
"id": "5d42bad89dd17c0ffccff9f8"
},
{
"competition": {
"id": 2013,
},
"currentSeason": {
"id": 589, "endDate": "2020-12-06",
},
"id": "5e622421bcd3fd22b4b372df"
},
{
"competition": {
"id": 2015,
},
"currentSeason": {
"id": 596, "endDate": "2021-05-23",1
},
"id": "5f16bd18da7e443c44cb7ca5"
},
{
"competition": {
"id": 2084,
},
"currentSeason": {
"id": 603, "endDate": "2021-05-30",
},
"id": "5f16bd76da7e443c44cb7ca7"
},
{
"competition": {
"id": 2011,
},
"currentSeason": {
"id": 473, "endDate": "2020-07-04",
},
"id": "5d42ba929dd17c0ffccff9f7"
},
]
Желаемый результат:
[
{
"competition": {
"id": 2013,
},
"currentSeason": {
"id": 589, "endDate": "2020-12-06",
},
"id": "5e622421bcd3fd22b4b372df"
},
{
"competition": {
"id": 2015,
},
"currentSeason": {
"id": 596, "endDate": "2021-05-23",1
},
"id": "5f16bd18da7e443c44cb7ca5"
},
{
"competition": {
"id": 2084,
},
"currentSeason": {
"id": 603, "endDate": "2021-05-30",
},
"id": "5f16bd76da7e443c44cb7ca7"
},
{
"competition": {
"id": 2011,
},
"currentSeason": {
"id": 473, "endDate": "2020-07-04",
},
"id": "5d42ba929dd17c0ffccff9f7"
},
]
Ближайшее, что я получил, это два вложенных foreach, но по какой-то причине все еще есть дубликаты:
competitions.forEach((c, i1) => {
competitions.forEach((n, i2) => {
if (c.competition.id === n.competition.id && c.id !== n.id) {
const cEndDate = new Date(c.currentSeason.endDate);
const nEndDate = new Date(n.currentSeason.endDate);
if (cEndDate < nEndDate) {
competitions.splice(i1, 1);
} else {
competitions.splice(i2, 1);
}
}
});
});
splice
, так как нужно переиндексировать длину массива, но поскольку я получил эти вложенные foreach, там может быть какая-то проблема. Я также чувствую, что метод filter
может быть полезен с исходным массивом, передаваемым в качестве параметра, но застрявшим на logi c. Заранее спасибо.
Вот код для тестирования: https://codepen.io/kevinch/pen/dyMPdww