主数据数据:
{
"0": {
"dept": "广西",
"clearAmount": "770040.00",
"contractno": "WK-2022-00001",
"projno": "414ESM2205",
"contractSaleAmount": "111.00",
"customerProviderno": "10001044"
},
"1": {
"dept": "安徽",
"clearAmount": "212313.00",
"contractno": "WK-2022-00001",
"projno": "414ESM2205",
"contractSaleAmount": "55.00",
"customerProviderno": "10001046"
},
"2": {
"dept": "上海",
"clearAmount": "5445.00",
"contractno": "WK-2022-00031",
"projno": "414ESM2205",
"contractSaleAmount": "423.00",
"customerProviderno": "10001044"
}
}
辅数据:
[{"mainProjno":"413ESM2211,413GSM2209,413ESI2201","yearMonth":"2023-08"},{"mainProjno":"1111","4444","yearMonth":"2023-06"}]
现在需求是根据辅数据中的项目编号字段集合mainProjno,去找出主数据中对应项目编号并且customerProviderno和contractno相同的数据,把clearAmount数值累加,dept拼接在一起,麻烦各位道友用javaScript es5的方法帮我想想,或者提供思路也可以。谢谢各位!
【以下回答由 GPT 生成】
首先,我们可以按照以下步骤来实现这个需求:
mainProjno
字段进行分割,得到项目编号数组。clearAmount
进行累加,并将对应的dept
拼接在一起。dept
,对应的值为累加后的clearAmount
。以下是使用JavaScript(ES5)的代码实现:
// 主数据
var mainData = {
"0": {
"dept": "广西",
"clearAmount": "770040.00",
"contractno": "WK-2022-00001",
"projno": "414ESM2205",
"contractSaleAmount": "111.00",
"customerProviderno": "10001044"
},
"1": {
"dept": "安徽",
"clearAmount": "212313.00",
"contractno": "WK-2022-00001",
"projno": "414ESM2205",
"contractSaleAmount": "55.00",
"customerProviderno": "10001046"
},
"2": {
"dept": "上海",
"clearAmount": "5445.00",
"contractno": "WK-2022-00031",
"projno": "414ESM2205",
"contractSaleAmount": "423.00",
"customerProviderno": "10001044"
}
};
// 辅数据
var auxiliaryData = [
{
"mainProjno": "413ESM2211,413GSM2209,413ESI2201",
"yearMonth": "2023-08"
},
{
"mainProjno": "1111,4444",
"yearMonth": "2023-06"
}
];
// 将主数据转换成数组形式
var mainDataArray = Object.keys(mainData).map(function(key) {
return mainData[key];
});
// 结果对象,用于存储拼接好的dept和累加后的clearAmount
var result = {};
// 遍历辅数据
auxiliaryData.forEach(function(auxData) {
// 分割mainProjno字段,得到项目编号数组
var projnoArray = auxData.mainProjno.split(',');
// 遍历项目编号数组
projnoArray.forEach(function(projno) {
// 循环遍历主数据数组,找到满足条件的数据
mainDataArray.forEach(function(data) {
if (data.projno === projno && data.customerProviderno === auxData.customerProviderno && data.contractno === auxData.contractno) {
// 找到了满足条件的数据,进行累加和拼接操作
if (result[data.dept]) {
// 如果该dept已经存在,累加clearAmount
result[data.dept] += parseFloat(data.clearAmount);
} else {
// 如果该dept不存在,初始化clearAmount
result[data.dept] = parseFloat(data.clearAmount);
}
}
});
});
});
console.log(result);
运行以上代码,得到的结果就是根据辅数据进行匹配和累加后的结果对象。