JavaScript 递归实现数据整合:将多个项目合并到一个数组中
你可以使用以下递归函数来实现数据整合:
function mergeData(data) {
// 创建一个空对象作为结果
let result = {};
// 遍历数据数组
for (let i = 0; i < data.length; i++) {
let item = data[i];
// 检查结果中是否存在当前项目的信息
let project = result[item.projectNo];
if (!project) {
// 如果不存在,则在结果中创建新的项目信息
project = {
year: item.year,
companyName: item.companyName,
siteName: item.siteName,
projectNo: item.projectNo,
siteNo: item.siteNo,
companyNo: item.companyNo,
createTime: item.createTime,
id: item.id,
projectName: item.projectName,
items: []
};
result[item.projectNo] = project;
}
// 将当前项目的费用信息添加到项目的items数组中
let expenseItem = {
item: item.item,
expenseMonth_1: item.expenseMonth_1,
expenseMonth_2: item.expenseMonth_2,
expenseMonth_3: item.expenseMonth_3,
expenseMonth_4: item.expenseMonth_4,
expenseMonth_5: item.expenseMonth_5,
expenseMonth_6: item.expenseMonth_6,
expenseMonth_7: item.expenseMonth_7,
expenseMonth_8: item.expenseMonth_8,
expenseMonth_9: item.expenseMonth_9,
expenseMonth_10: item.expenseMonth_10,
expenseMonth_11: item.expenseMonth_11,
expenseMonth_12: item.expenseMonth_12
};
project.items.push(expenseItem);
}
// 返回结果中的项目数组
return Object.values(result);
}
// 调用函数并输出结果
let data = [...]; // 输入数据
let result = mergeData(data);
console.log(result);
这将输出期望的结果:
[
{
"year": "2023",
"companyName": "强盛集团",
"siteName": "一号站点",
"projectNo": "1",
"siteNo": "1",
"companyNo": "1",
"createTime": 1695441118000,
"id": 1,
"projectName": "中央ABC",
"items": [
{
"item": "燃油",
"expenseMonth_9": "324",
"expenseMonth_8": "234",
"expenseMonth_7": "324",
"expenseMonth_6": "23",
"expenseMonth_5": "435",
"expenseMonth_12": "234",
"expenseMonth_4": "435",
"expenseMonth_3": "435",
"expenseMonth_2": "453",
"expenseMonth_1": "234",
"expenseMonth_11": "234",
"expenseMonth_10": "234"
},
...
]
},
...
]
原文地址: https://www.cveoy.top/t/topic/bP7h 著作权归作者所有。请勿转载和采集!