我用
从mongoDB获取数据Content.find({}).fetch()
所以有一个包含1000个文档的数组。每个文档都有一个category
字段。
const data = [
{
title: 'Article 1',
category: 'cars'
},
{
title: 'Article 2',
category: 'vegetables'
}
]
现在我想显示一个列表,其中包含按类别组织的文档(获取每个类别的自己的列表)。 我认为我应该采取的最佳方式是制作地图。但我不知道该怎么做。
这就是我在做的事情:
首先,我已经对类别进行了硬编码(知道这是我能做的最糟糕的事情) 然后...
categories.map(category => {
return (<List data={data.filter(d => d.category === category)} />)
}
有了这个,我将浏览30个类别并对我的数据进行30次filter
。我认为在开头创建一种排序数据集会更聪明。
答案 0 :(得分:1)
_.sortBy(data, ['category', 'title']);
data.map(doc => ( console.log(doc); ));
这将按类别然后按标题对您的数据进行排序。 或者,如果您想根据类别使用groupBy将项目分成数组:
_.groupBy(data, 'category');
_.each(data, itemsByCategory => {
return <List data={itemsByCategory} />;
});
答案 1 :(得分:0)
由于聚合mongodb上的数据不是一个选项,我会在客户端通过循环数据创建一个地图,如:
var titlesByCategory = {};
for (let value of data) {
if (titlesByCategory[data.category]) {
titlesByCategory[value.category].push(value.title);
}
else {
titlesByCategory[value.category] = [value.title];
}
}
然后,您可以使用类别作为键来访问给定类别的标题数组;例如titlesByCategory[vegetables]
将返回蔬菜数组,您可以在其上进行循环/地图或任何您需要的操作。
答案 2 :(得分:0)
使用underscoreJS
_.groupBy(data, 'length');