业务问题和javascript基础问题


主数据数据:
{
    "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 生成】

首先,我们可以按照以下步骤来实现这个需求:

  1. 将主数据的格式转换成数组的形式,方便后续遍历操作。
  2. 循环遍历辅数据,对于每个辅数据项,将其中的mainProjno字段进行分割,得到项目编号数组。
  3. 遍历项目编号数组,对于每个项目编号,通过循环遍历主数据数组,找到满足条件的数据。
  4. 将找到的数据中的clearAmount进行累加,并将对应的dept拼接在一起。
  5. 最后得到的结果是一个对象,其中的属性为拼接好的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);

运行以上代码,得到的结果就是根据辅数据进行匹配和累加后的结果对象。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^