@sd2056

Как сделать вывод сообщений с сортировкой по дате как в телеграмм?

Допустим есть такой массив объектов

const arr = [
{id:0, text: "text", date: "2021-05-14T16:29:46.000Z"},
    {id:1, text: "text 2", date: "2021-05-14T17:29:46.000Z"},
    {id:1, text: "text 3", date: "2021-06-14T17:29:46.000Z"},
]


Вывод такой

"15 мая"

текст
текст 1

"вчера"

текст
текст 2

"сегодня"

текст
текст 3
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
chincharovpc
@chincharovpc
const groupArr = {}
arr.map(message => ({...message, date: new Date(message.date)}))
    .sort((m1, m2) => m1.date - m2.date)
    .forEach(message => {
        const date = message.date.toISOString().split('T')[0]
        if (!groupArr.hasOwnProperty(date)) {
            groupArr[date] = []
        }
        groupArr[date].push(message)
    })

Object.keys(groupArr).forEach(key => console.log(groupArr[key]))
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
const sortedArr = arr
    .map(({date, ...rest}) =>
        ({...rest, date: new Date(date)}))
    .sort(({date: a}, {date: b}) =>
        b - a);
console.log(sortedArr)
Ответ написан
@AleksRap
Отсортировать массив перед выводом. Если массив летит с бэка, то отправлять параметры сортировки на бэк, там сортировать и возвращать нужный вариант
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы