Группировка элементов массива в недели по переменной дате в Typescript

#typescript

#typescript

Вопрос:

У меня есть массив с именем items, который содержит 29 элементов. У каждого элемента есть дата, имя, код и номер недели. Я пытаюсь сгруппировать эти элементы по номеру недели в typescript. Кто-нибудь может помочь с этим, пожалуйста?

Вот как выглядит мой массив в настоящее время:

 items:
0:
   code: "N"
   date: "2020-10-13T01:00:00.000Z"
   name: "Tuesday"
   week: 7
1:
   code: "N"
   date: "2020-10-13T01:00:00.000Z"
   name: "Tuesday"
   week: 7
2: {date: "2020-10-12T01:00:00.000Z", name: "Monday", code: "O", …}
3: {date: "2020-10-12T01:00:00.000Z", name: "Monday", code: "O", …}
  

И Т.Д. — до 29. Однако я хочу, чтобы он был сгруппирован по неделям следующим образом. Кто-нибудь знает, как это сделать?

 weeks:

0:
     days: 
          0:{name:Monday, date: ####, code:###}
          0:{name:Tuesday, date: ####, code:###}
1:
     days: 
          0:{name:Monday, date: ####, code:###}
          0:{name:Tuesday, date: ####, code:###}
2:
     days: 
          0:{name:Monday, date: ####, code:###}
          0:{name:Tuesday, date: ####, code:###}
  

Ответ №1:

Либо используйте groupBy из lodash пакета (с небольшой постобработкой), либо просто используйте for так:

 const weeks: Record<string, any> = {};
for (const item of items) {
  if (!weeks[item.week]) {
    weeks[item.week] = {
     days: []
    }
  }
  weeks[item.week].days.push({
    name: item.name,
    date: item.date,
    code: item.code
  })
}
  

Примечание: вместо any вы должны указать некоторый тип с реквизитом массива days, где у каждого элемента есть имя, дата и реквизиты кода

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

1. Спасибо, если я вставлю этот массив недель в свой массив academic_year.graphData следующим образом: academic_year.graphData.push({недели}); Когда я пытаюсь записать в консоль недели следующим образом: console.log(academic_year.graphData); Я получаю эту ошибку: не удается найти другой вспомогательный объект ‘[object Объект]’ типа ‘объект’. ngFor поддерживает привязку только к итерациям, таким как массивы.

2. Нет проблем. Просто превратите запись в массив, подобный этому: const weeksArray = Object.values(weeks)

3. Лучше превратите это в новый вопрос по SO