#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