js 数组根据条件合并相同数据

项目需求是将相同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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值