后台业务要求分几个大类展示对应的数据,后端一下把所有数据输出给前端,这时前端就需要做数据处理,这是我业务中出现的,特分享给大家学习。
function geshihua(data,type){
// 1.拿到所有type和对应的下标
var arr = [];
data.map((e,i)=>{
let obj = {
[type]:e[type],
index:i
}
arr.push(obj)
})
// 2.归类
let newarr = []
arr.map((e,i)=>{
// 数据初始化
if(!i){
let obj = {
[type]:e[type],
data:[]
}
newarr.push(obj)
}
let index = e.index
// 如果没有这个数据,新加一个类
// debugger
for(let j=0;j<newarr.length;j++){
// 如果已经有这个type,把数据添加进去即可
if(newarr[j][type] == e[type]){
newarr[j].data.push(data[index])
break;
}
// 如果没有这个type,就新加一个
else{
// 循环到最后一个,如果没有,则加入这个type数据
if(j==newarr.length-1){
let obj = {
[type]:e[type],
data:[data[i]]
}
newarr.push(obj)
break;
}
}
}
})
return newarr
}
// 需要分类的数据
let data = [
{
"id": 1,
"typeInfo": "协会(非工会办公室)",
"remark": null,
"deleted": 0
},
{
"id": 2,
"typeInfo": "工会办公室",
"remark": null,
"deleted": 0
},
{
"id": 3,
"typeInfo": "部门工会",
"remark": null,
"deleted": 0
},
{
"id": 4,
"typeInfo": "部门工会",
"remark": null,
"deleted": 0
},
{
"id": 5,
"typeInfo": "协会(非工会办公室)",
"remark": null,
"deleted": 0
},
{
"id": 6,
"typeInfo": "工会办公室",
"remark": null,
"deleted": 0
}
]
//传递要处理的数据和对应分类的key值
let result = geshihua(data,'typeInfo') //结果
console.log(result); //打印
结果输出: