javascript - 按类别分组数据
问题描述
我有一个对象数组,每个对象都有一个类别数组。类别可以重复。我想按每个类别对这些数据进行分组,并以类别作为标题将它们显示在另一个之下。
想象一下我有
[
{
title: 'Title 1',
id: '1',
categories: ['food']
},
{
title: 'Title 2',
id: '2',
categories: ['cat']
},
{
title: 'Title 3',
id: '3',
categories: ['food', 'cat']
},
{
title: 'Title 4',
id: '4',
categories: ['sky']
},
{
title: 'Title 5',
id: '5',
categories: ['cat', 'sky']
},
]
在本Food
节的这种情况下,我应该有Title 1
等等Title 2
。
有谁知道如何对这些数据进行分组?谢谢!
解决方案
工作演示:
var myArr = [
{
title: 'Title 1',
id: '1',
categories: ['food']
},
{
title: 'Title 2',
id: '2',
categories: ['cat']
},
{
title: 'Title 3',
id: '3',
categories: ['food', 'cat']
},
{
title: 'Title 4',
id: '4',
categories: ['sky']
},
{
title: 'Title 5',
id: '5',
categories: ['cat', 'sky']
},
];
function myFun(arr) {
var uniqueCats = [];
var catsObj = {};
var finalArr = [];
for (var i = 0; i < arr.length; i++) {
var item = arr[i];
var cats = item.categories;
var title = item.title;
var id = item.id;
for (var j = 0; j < cats.length; j++) {
var cat = cats[j];
if (uniqueCats.indexOf(cat) < 0) {
uniqueCats.push(cat); //console.log(uniqueCats);
catsObj[cat] = [];
}
catsObj[cat].push({
'title': title,
'id': id
});
}
}
for(var key in catsObj) {
finalArr.push({
"category": key,
"items": catsObj[key]
});
}
return finalArr;
}
console.log(myFun(myArr));
推荐阅读
- django - 弹性搜索聚合 [python]
- python - Flask SQL Alchemy vs MyPy - 模型类型错误
- python - 由于 linux 和 windows 上的路径分隔符不同,Python ssh 程序无法运行
- scala - 为 scala 嵌套案例类创建 cassandra 表
- excel - 如何在 Power BI 表中跨维度乘以度量?
- c# - 文档已移动 201 从 WebResponse 中删除
- javascript - 如何在 Firebase 云功能中添加时间戳
- c# - 为不同的主体抛出 AmbiguousMatchException
- php - 与 Eloquent/Laravel 的复杂关系
- docker - Log file not created in a .NET Core application running in a Docker container