项目需求是将相同id人的taskConten拼接一起,在将endTime和taskContent相同的数据分组,最终结果是每个id只会在一个组别里
待处理数据
let tableData2 = [
{
empId: 10,
empName: "姓名1",
endTime: "2022-11-11 21:30:00",
taskContent: "任务1",
},
{
empId: 22,
empName: "姓名2",
endTime: "2022-11-11 21:30:00",
taskContent: "任务1",
},
{
empId: 33,
empName: "姓名3",
endTime: "2022-11-11 21:30:00",
taskContent: "任务2",
},
{
empId: 44,
empName: "姓名4",
endTime: "2022-11-11 21:30:00",
taskContent: "任务3",
},
{
empId: 312,
empName: "姓名5",
endTime: "2022-11-11 20:30:00",
taskContent: "任务3",
},
{
empId: 123,
empName: "姓名6",
endTime: "2022-11-11 20:30:00",
taskContent: "任务3",
},
{
empId: 312,
empName: "姓名5",
endTime: "2022-11-11 20:30:00",
taskContent: "任务4",
},
{
empId: 123,
empName: "姓名6",
endTime: "2022-11-11 20:30:00",
taskContent: "任务4",
},
];
处理后数据
数据处理函数
function checkSameData(tableData2) {
if(!Array.isArray(tabledData2)) return tabledData2;
let data = JSON.parse(JSON.stringify(tableData2));
let arr = data.reduce((preArr, cur) => {
let index = preArr.findIndex((v) => v.empId === cur.empId);
if (index >= 0) preArr[index].taskContent += "-" + cur.taskContent;
return index >= 0 ? preArr : [...preArr, cur];
}, []);
return arr.reduce((preArr, cur) => {
let index = preArr.findIndex((v) => v.taskContent === cur.taskContent && v.endTime === cur.endTime);
if (index >= 0) {
(preArr[index].children || (preArr[index].children = [])).push({ empId: cur.empId, empName: cur.empName });
} else {
preArr = [
...preArr,
{
taskContent: cur.taskContent,
endTime: cur.endTime,
children: [{ empId: cur.empId, empName: cur.empName }],
},
];
}
return preArr;
}, []);
}
checkSameData(tableData2);