[英]create complex table from the Json data
我有一个看起来像这样的 JSON
[
{
"teacher": "teacher1",
"student": "student1"
},
{
"teacher": "teacher1",
"student": "student1"
},
{
"teacher": "teacher1",
"student": "student1"
},
{
"teacher": "teacher2",
"student": "student1"
},
{
"teacher": "teacher2",
"student": "student2"
}
]
我想将它转换成这样的方式,它可以向我显示每个老师的计数
[
{
"teacherName": "teacher1",
"teacherCount": "3"
},
{
"teacherName": "teacher2",
"teacherCount": "2"
},
]
我正在开发一个节点项目,我需要在表格中打印这些数据。
您可以构建一个 Map(使用 .reduce .reduce()
),它由teacher
值索引/键控。 存储在teacher 中的值是在您的对象数组中看到teacher 的次数的计数。 然后,您可以将Array.from()
与使用 reduce 构建的Map
使用,以从 map 获取每个键值对(其中键是teacherName,值是teacherCount)。 要获取每个键值对,您可以使用 Array.from() 和 map 每个键值 ([key, value]) 到 object 的映射 function ,例如:
const data = [{ "teacher": "teacher1", "student": "student1" }, { "teacher": "teacher1", "student": "student1" }, { "teacher": "teacher1", "student": "student1" }, { "teacher": "teacher2", "student": "student1" }, { "teacher": "teacher2", "student": "student2" } ]; const res = Array.from(data.reduce((map, {teacher}) => { return map.set(teacher, (map.get(teacher) || 0) + 1); }, new Map), ([teacherName, teacherCount]) => ({teacherName, teacherCount})); console.log(res);
您可以使用reduce
将您的计数收集到一个唯一的集合中,如果教师存在则将其递增,否则将其初始化为 1。然后使用map
来说明如何格式化的示例。
let data = getData(); let teachers = data.reduce((acc, val) => { if (val.teacher in acc) acc[val.teacher]++; else acc[val.teacher] = 1; return acc; }, {}); let formatted = Object.entries(teachers).map( ([teacherName, teacherCount]) => ({ teacherName, teacherCount }) ); console.log(formatted); /*****************************************************************/ function getData() { return [{ "teacher": "teacher1", "student": "student1" }, { "teacher": "teacher1", "student": "student1" }, { "teacher": "teacher1", "student": "student1" }, { "teacher": "teacher2", "student": "student1" }, { "teacher": "teacher2", "student": "student2" } ] }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.