javascript - 如何按其中一个字段对数组对象进行分组?
问题描述
我正在尝试通过从另一个数组列表中过滤来重组数组。
包含过滤器的数组:
const filteringTags: [
'Kitchen',
'Accessories',
...
]
我想操作的数组:
[
{
category: 'free',
date: '2020-04-04',
title: 'Some Title',
tags: [
'Kitchen',
'Accessories'
]
},
{
category: 'premium',
date: '2020-04-05',
title: 'Another Title',
tags: [
'Kitchen'
]
},
...
]
预期结果:
[
'Kitchen': [
{
category: 'free',
date: '2020-04-04',
title: 'Some Title',
tags: [
'Kitchen',
'Accessories'
]
},
{
category: 'premium',
date: '2020-04-05',
title: 'Another Title',
tags: [
'Kitchen'
]
}
],
'Accessories': [
{
category: 'free',
date: '2020-04-04',
title: 'Some Title',
tags: [
'Kitchen',
'Accessories'
]
}
]
]
我试图避免使用库,所以如果您有任何建议,如果您使用 vanilla JS,我将不胜感激。
解决方案
将所需的输出视为对象数组,
const data = [
{
category: 'free',
date: '2020-04-04',
title: 'Some Title',
tags: ['Kitchen', 'Accessories'],
},
{
category: 'premium',
date: '2020-04-05',
title: 'Another Title',
tags: ['Kitchen'],
},
];
const filteringTags = ['Kitchen', 'Accessories'];
const getGroupedData = (data, filters) => {
const result = {};
filters.forEach(filter => {
result[filter] = [
...JSON.parse(JSON.stringify((result[filter] || ''))),
...JSON.parse(JSON.stringify(data.filter(d => d.tags.includes(filter)))),
];
});
return result;
};
let finalResult = getGroupedData(data, filteringTags);
finalResult = Object.keys(finalResult).map(key => ({
[key]: finalResult[key],
}));
console.log(finalResult);
将输出视为对象
const data = [
{
category: 'free',
date: '2020-04-04',
title: 'Some Title',
tags: ['Kitchen', 'Accessories'],
},
{
category: 'premium',
date: '2020-04-05',
title: 'Another Title',
tags: ['Kitchen'],
},
];
const filteringTags = ['Kitchen', 'Accessories'];
const getGroupedData = (data, filters) => {
const result = {};
filters.forEach(filter => {
result[filter] = [
...JSON.parse(JSON.stringify((result[filter] || ''))),
...JSON.parse(JSON.stringify(data.filter(d => d.tags.includes(filter)))),
];
});
return result;
};
let finalResult = getGroupedData(data, filteringTags);
console.log(finalResult);
希望这可以帮助。
推荐阅读
- python - 在 Google AppEngine 上使用 eventlet 部署 Flask Socket.io 应用程序
- php - 如何编写一个 mySQL 查询以便在前端组成一个表?
- vb.net - 使用 Bass.net 同时播放多种声音
- python - 如何使用 SQL Alchemy 将图像添加到数据库中?
- php - 显示嵌套 ACF 转发器字段的简码
- spring - Spring Boot cf 插件
- python - 为什么我的圆形程序在完成之前将乌龟旋转了两次
- lua - HAProxy Lua如何更改服务器端口?
- intellij-idea - 如何让 IntelliJ 从包中的其他文件中提出代码完成建议?
- php - Telegram-Bot 命令问题 (php)