不停敲代码 2023-08-30 17:36 采纳率: 50%
浏览 4

业务问题和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的方法帮我想想,或者提供思路也可以。谢谢各位!

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-30 20:54
    关注

    【以下回答由 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);
    

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


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

报告相同问题?

问题事件

  • 创建了问题 8月30日

悬赏问题

  • ¥15 关于#游戏策划#的问题:当浏览器输入兑换码,疯狂点击领取按钮,邮箱马上到账几十个兑换码礼包
  • ¥15 虚拟机打不开,怎么解决
  • ¥15 为什么游戏兑换码能被重复领取
  • ¥30 (急!)java实现二叉链表构建二叉树,实现相关功能
  • ¥15 C#tekloa节点插件小项
  • ¥20 脑电信号的局部场电位分析
  • ¥30 Diodes 霍尔开关AH337已经obselete,他的升级替代料【不改变现有电路图】
  • ¥15 python爬虫IndexError: list index out of range
  • ¥15 (标签-考研|关键词-set)
  • ¥15 求修改代码,图书管理系统