@astrodeep

Как отфильтровать массив?

Добрый день имеется массив с данными
let Arr =[ {
        "id": "102",
        "ticket_category_id": {
            "id": "1",
        },
        "ticket_category_sub_id": {
            "id": "2",
            "title": "Создание"
        },
        "account_id": "2222",
        "description": "-",
        "status": {
            "name": "new",
            "title": "Новый"
        },
        "viewed": "2020-05-22 13:35:24",
        "created": "2020-05-22 08:50:50",
        "modified": null,
        "messages": [
            {
                "id": "353",
                "ticket_id": "102",
                "message": "456456456456",
                "created": "2020-04-22 14:03:32"
            },
            {
                "id": "354",
                "ticket_id": "102",
                "message": "4555555555555555555555555555555555555555555556",
                "created": "2020-05-22 14:03:35"
            },
            {
                "id": "367",
                "ticket_id": "102",
                "message": "werwerwer",
                "created": "2020-05-22 16:24:16"
            }
        ]
    }

 ]


как сделать такую фильтрацию- найти в массиве messages найти последний created и сравнить с viewedи если он больше вывести количество элементов в массиве messages
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
То что у Вас в полях created и viewed вполне можно отдать в конструктор Date, а даты уже можно сравнивать между собой
console.log(new Date("2020-05-22 16:24:16")); // работает

Дальше, последний created, тут нужно уточнение:
Если массив messages всегда упорядочен по полю created, как и в примере, то можно просто брать последний элемент массива и работать с ним:
const lastMessage = messages[messages.length - 1];
console.log(lastMessage);

Если такой гарантии нет, то нужно искать максимум:
const lastMessage = messages.reduce(([maxDate, maxMessage], currentMassage) => {
  const currentDate = new Date(currentMassage.created);
  if(currentDate > maxDate) {
    return [currentDate, currentMassage];
  }
  return [maxDate, maxMessage];
}, [-Infinity, null])[1];
console.log(lastMessage);

Ну а если с этим разберетесь, то с последним пунктом у Вас уже не должно быть проблем, тут все аналогично
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы