毕业设计中数据分类(党政管理)
一个需求困扰多天,今天中遇解决,期间问过同学,百度过,咨询过老师,业界大佬,最终还是解决了。!!!
1. 这是sql语句查询出来的结果(查询出来的数据没有分类导致name重复)
SELECT a.wno, a.name,a.id, a.title, m_test_list.score FROM ( SELECT m_admin.wno,m_admin.name,m_test.id,m_test.title FROM m_test LEFT JOIN m_admin ON m_admin.party_branch = m_test.party_branch WHERE m_admin.party_branch = 1) a LEFT JOIN m_test_list ON a.wno = m_test_list.userId AND a.id = m_test_list.testId ORDER BY a.wno
2.后端对数据进行分类代码
let links = await this.app.mysql.query(sql); // 这是上边数据库查询到的数据,此时没有进行分类 links.forEach(element => { if (element.score == null) { element.score = 0 } });
// 对数据进行分类 let map = {}, dest = []; for (let i = 0; i < links.length; i++) { let ai = links[i]; if (!map[ai.wno]) { dest.push({ wno: ai.wno, arrdata: [ai] }) map[ai.id] = ai; } else { for (let j = 0; j < dest.length; j++) { let dj = dest[j]; if (dj.wno == ai.wno) { dj.arrdata.push(ai); break; } } } }
// 呈现的效果为一个数组(从对象变为数组)
3.对数据进行二次封装
let objArr = []; for (let i = 0; i < nameArr.length; i++) { let tmpObj = {}; let num = 0; tmpObj['name'] = nameArr[i].name; let wno = nameArr[i].wno; for (let j = 0; j < dest.length; j++) { if (wno == dest[j].wno) { let str = `test${num}`; tmpObj[str] = dest[j].arrdata[0].score; num++; } } objArr.push(tmpObj); }
数据结构图:
最终呈现的效果: