JavaScript: создание и фильтрация / создание массива объектов по дате. т.Е. просмотр истории чата Skype

#javascript #node.js #sequelize.js

#javascript #node.js #sequelize.js

Вопрос:

Я пробовал это последние пару часов, и я много искал, но не смог найти никаких решений. Я извлекаю данные из базы данных, и там есть временная метка.

Я хочу фильтровать записи по дате, т.Е. Если есть данные на дату 2020-08-20, затем создайте объект, а затем установите все данные за эти дни в одном объекте.

Объект, который я извлекаю:

 [
    {
        "id": 16,
        "activity": "Amazon 16",
        "type": "delivery_arrival",
        "url": "www.google.com",
        "created_at": "2020-08-25T12:14:13.000Z",
        "updated_at": "2020-08-25T12:14:13.000Z"
    },
    {
        "id": 15,
        "activity": "Amazon 15",
        "type": "delivery_arrival",
        "url": "www.google.com",
        "created_at": "2020-08-25T12:14:10.000Z",
        "updated_at": "2020-08-25T12:14:10.000Z"
    },
    {
        "id": 14,
        "activity": "Amazon 14",
        "type": "delivery_arrival",
        "url": "www.google.com",
        "created_at": "2020-08-25T12:14:07.000Z",
        "updated_at": "2020-08-25T12:14:07.000Z"
    },
    {
        "id": 13,
        "activity": "Amazon 13",
        "type": "delivery_arrival",
        "url": "www.google.com",
        "created_at": "2020-08-25T12:14:03.000Z",
        "updated_at": "2020-08-25T12:14:03.000Z"
    },
    {
        "id": 12,
        "activity": "Amazon 12",
        "type": "delivery_arrival",
        "url": "www.google.com",
        "created_at": "2020-08-25T12:13:59.000Z",
        "updated_at": "2020-08-25T12:13:59.000Z"
    },
    {
        "id": 11,
        "activity": "Amazon 11",
        "type": "delivery_arrival",
        "url": "www.google.com",
        "created_at": "2020-08-25T12:13:51.000Z",
        "updated_at": "2020-08-25T12:13:51.000Z"
    },
    {
        "id": 10,
        "activity": "Amazon 10",
        "type": "delivery_arrival",
        "url": "www.google.com",
        "created_at": "2020-08-25T12:13:46.000Z",
        "updated_at": "2020-08-25T12:13:46.000Z"
    },
    {
        "id": 9,
        "activity": "Amazon 9",
        "type": "delivery_arrival",
        "url": "www.google.com",
        "created_at": "2020-08-25T12:13:40.000Z",
        "updated_at": "2020-08-25T12:13:40.000Z"
    },
    {
        "id": 8,
        "activity": "Amazon 8",
        "type": "delivery_arrival",
        "url": "www.google.com",
        "created_at": "2020-08-25T12:13:33.000Z",
        "updated_at": "2020-08-25T12:13:33.000Z"
    },
    {
        "id": 7,
        "activity": "Amazon 7",
        "type": "delivery_arrival",
        "url": "www.google.com",
        "created_at": "2020-08-25T12:13:30.000Z",
        "updated_at": "2020-08-25T12:13:30.000Z"
    }
]
  

Чего я хочу, так это:

 [
    {
        "date": "2020-08-20",
        "activities": [
            {
                "activity": "name1"
            },
            {
                "activity": "name2"
            }
        ]
    },
    {
        "date": "2020-08-19",
        "activities": [
            {
                "activity": "name1"
            },
            {
                "activity": "name2"
            }
        ]
    }
]
  

Кроме того, есть разбивка на страницы, и данные должны быть по убыванию.

Ответ №1:

Вы могли бы использовать https://momentjs.com / и фильтр с помощью is between , а затем сортировка с помощью is after ; Я также порекомендую Ramda Group By (и если вы уже там, фильтр и сортировка из Ramda неизменяемы, сортировка Array.prototype.sort — нет)

Комментарии:

1. Есть ли какой-либо способ сделать собственный способ? пример был бы очень полезен. @Coding Edger

Ответ №2:

  var ParshedArray = {}
    var dates = []
    result.forEach(function (row) {
        var a = row.date.getFullYear()
        var b = row.date.getMonth() 1
        var c = row.date.getDate()
        var d = a "-" b "-" c
        console.log(d)
        var objDate = ParshedArray[d]
        if (!objDate) {
            objDate = {
                Date: d,
                Massages: []
            }

            ParshedArray[row.date] = objDate
            dates.push(objDate)
        }

        objDate.Massages.push({
            id: row.id,
            text: row.text,
            date: row.date
        })
    })
console.log(dates)
  

Комментарии:

1. Ваш ответ может быть улучшен путем добавления дополнительной информации о том, что делает код и как это помогает OP.