【发布时间】:2019-02-09 11:43:55
【问题描述】:
问题如下:(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...)。
我相信我应该先使用 reduce() 方法,然后再使用 .map(),但我已经尝试了多种方法,但它对我不起作用。 Reduce() 方法正在创建一个没有长度的数组...这就是我尝试在 App.js 中使用 reduce 实现它并将其作为“模块”传递给 thematicArea.jsx 组件的方式:
modules={this.state.modules.reduce(function(groups, item) {
const val = item["thematicArea"];
groups[val] = groups[val] || [];
groups[val].push(item);
return groups;
}, [])}
达到预期结果的最佳方法是什么?
【问题讨论】:
标签: javascript arrays reactjs mapreduce javascript-objects