проблема заключается в следующем: (https://codesandbox.io/s/8p21n6p09l)
У меня есть массив объектов (называемых модулями), который выглядит так:
const modules = [
{
thematicArea: "Topic 1",
id: 1,
name: "Budowanie postawy asertywnej",
details: [
"Czym jest asertywność?",
"Asertywny Asertywny menedżer – charakterystyczne zachowania"
]
},
{
thematicArea: "Topic 2",
id: 2,
name: "Asertywne narzędzia",
details: [
"Asertywna odmowa – zastosowanie trzyetapowej procedury",
"Technika „Zdartej płyty”",
"Wyrażanie pochwał i próśb" ]
},
{
thematicArea: "Topic 3",
id: 3,
name: "Lorem ipsum 1",
details: ["Coś się wymyśli", "Żeby nie było tak łyso"]
},
{
thematicArea: "Topic 3",
id: 4,
name: "Lorem ipsum 2",
details: [
"Wyczesane szkolenia",
"Naprawdępowinieneś wrzucić to do koszyka",
"Na co czekasz - dodaj!"
]
},
{
thematicArea: "Topic 3",
id: 5,
name: "Ipsum Lorem",
details: ["Och", "Ach"]
},
{
thematicArea: "Topic 3",
id: 6,
name: "Ipsum Lorem 1",
details: ["Och", "Ach"]
},
{
thematicArea: "Topic 3",
id: 7,
name: "Ipsum Lorem 2",
details: ["Och", "Ach"]
},
и этот массив передается из App.js в компонент thmaticArea.jsx. Дело в том, что я передумал при отображении данных и хочу сгруппировать их по тематической области, чтобы это выглядело так:
Topic 1:
- Name 1
- Name 2
- Name 6
- ...
Topic 2:
- Name 3
- Name 5
Topic 3:
- Name 4
and so on.
Каждое имя уникально и может иметь только одну тематическую область (тему), но одна тематическая область (тема) может иметь несколько имен (имя 1, имя 2 ...).
Я считаю, что сначала мне нужно использовать метод redu () и затем .map (), но я пробовал это несколькими способами, и у меня это не сработало. Метод Reduce () создает массив без длины ... Вот как я пытался реализовать его с помощью Reduce в App.js и передать его компоненту thematicArea.jsx в виде 'modules':
modules={this.state.modules.reduce(function(groups, item) {
const val = item["thematicArea"];
groups[val] = groups[val] || [];
groups[val].push(item);
return groups;
}, [])}
Как лучше всего достичь ожидаемого результата?