javascript - Groupby一个数组并使用jquery获取元素作为子数组
问题描述
我有一个像下面这样的数组,需要用子数组转换这个数组
[{作者:“”类别:“test1”日期:“2020年9月8日”扩展名:null id:5 maintitle:“test”siteName:“site1”title:“test1”url:“”},
{作者:“”类别:“test1”日期:“2020 年 9 月 10 日”扩展名:null id:4 maintitle:“test2”siteName:“site1”title:“test2”url:“”},
{作者:“”类别:“test3”日期:“2020 年 9 月 2 日”扩展名:null id:1 主标题:“test3”站点名称:“Site3”标题:“test3”url:“”}]
输出将如下所示:
[{
id: 1,
date: "8 September 2020",
title: test1,
category: test1,
"files": {
"Site1": [{
author: " "
date: "8 September 2020",
extension: null,
title: "test1"
}, {
author: " ",
date: "10 September 2020"
extension: null,
title: "test2"
url: ""
}
]
}
},
[{
id: 2,
date: "8 September 2020",
title: "test3",
category: "test3",
"files": {
"site3": [{
author: " ",
date: "30 August 2020",
extension: null,
title: "test3",
url: ""
}]
}]
}]
Groupby 需要使用 Jquery/javascript 处理站点名称和类别。请帮助我。任何帮助深表感谢。
解决方案
您可以为所需组采用一个数组,并为嵌套数组采用迭代方法。
const
data = [{ author: "Merin", category: "Forms", date: "8 September 2020", documentName: "Credit1 Forms", documentUrl: "", id: 5, siteName: "Credit", title: "Forms" }, { author: "Sandeep", category: "Forms", date: "10 September 2020", documentName: "AFAD1 Forms", documentUrl: "#", id: 4, siteName: "Credit", title: "Forms" }, { author: "Jithin", category: "Policies", date: "2 September 2020", documentName: "Credit1 Manuel", documentUrl: "#", id: 1, siteName: "Credit", title: "Policies" }],
groups = [['category', 'files'], ['siteName']],
result = data.reduce((r, o) => {
groups
.reduce((p, [key, children = o[key]], i) => {
let value, group;
({ [key]: value, ...o } = o);
group = p.find(g => g[key] === value);
if (!group) p.push(group = { ...(i === 0 ? { id: p.length + 1 } : {}), [key]: value, [children]: [] });
return group[children];
}, r)
.push(o);
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- javascript - 窗口滚动 - 显示 div - 许多 div 的功能 - 纯 js
- svn - 使现有存储库适应颠覆主干/分支结构
- html - 将当前 HTML 页面转换为 PDF
- python - 计算列表中连续元素的数量
- debugging - 调试自定义 SSIS 任务
- zend-framework-routing - 判断是否有路由zend framework 2
- c# - MDI 子窗体由具有属性停靠填充的面板覆盖
- javascript - 根据屏幕宽度删除所有具有类的图像
- javascript - Jquery 验证器 - 没有空格条目
- qt - Tableview 行应在 QML 中按下时更改