@DeniSidorenko

Алгоритм разбитить массив на группы по датам?

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

Дано


Есть массив заказов которые берутся из MongoDB. Есть поля created_at который в формате timestamp(1617680741078)
Однако легко можно превратить в обычную дату через new Date(timestamp)

Требуется
Разбить на подмасивы, дабы можно было выводить под разной структуры под дням. К примеру есть 5 заказов , 2 из них сделаны 01.04.2021, 2 из них сделаны 02.04.2021 а один 05.04.2021
Получается новый массив который состоит из 3 массива( 0 элемент -2 пункта , 1 элемент - 2 заказ, 2 элемент - 1 заказ )
Так же хотелось бы что бы порядок был именно по дате...

Предположение
Правильно ли я понимаю, что к примеру 10 апреля в Unix время будет числом больше чем 9 апреля? Если да то таким образом можно будет сортировать по времени? Однако сам алгоритма сравнивания и создания новых массивов не совсем понятен.
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
webdisigner
@webdisigner
// Допустим у вас интернет магазин секс игрушек


var arr = [
  
  {name: 'вазелин', date: Date.now() - 5000000},
  {name: 'секс-игрушка: Катя', date: Date.now() - 70000000},
  {name: 'секс-игрушка: Елена Беркова', date: Date.now() - 9999999},
  {name: 'секс-игрушка: Боря Моисеев', date: Date.now() - 9999999},
  {name: 'секс-игрушка: Максим Галкин', date: Date.now() - 300000000},
  {name: 'дилдо обыкновенный', date: Date.now() - 300000000},
  {name: 'дилдо черный XXL', date: Date.now() - 66666666},
  {name: 'вазелин со вкусом банана', date: Date.now() - 50000000},
  {name: 'анальные шарики', date: Date.now() - 5000000}
  
  
]


arr = arr.reduce((x,y)=>{
        let d = new Date(y.date).toLocaleDateString();
        x[d]? x[d].push(y) : x[d] = [y]
        return x
  }, {})
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
agoalofalife
@agoalofalife
Team Lead
Обычно такие функции называются groupBy и реализованы во многих библиотеках например вот
Если не хотите использовать библиотеку то вот пример со stackoverflow
Вот например функция которая разбивает по дню
function groupday(value, index, array){
   let byday={};
    let d = new Date(value['created_at']);
    d = Math.floor(d.getTime()/(1000*60*60*24));
    byday[d]=byday[d]||[];
    byday[d].push(value);
  return byday
}

 data.map(groupday)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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