代码之家  ›  专栏  ›  技术社区  ›  London804

如何向对象添加值而不覆盖循环中的上一个值?

  •  0
  • London804  · 技术社区  · 4 年前

    以下面的代码为例:

    export const BOMs: BOM[] = [
       { part_num: "X-Wing", sub_part_num: "Max Engine", qty: 4 },
       { part_num: "X-Wing", sub_part_num: "Airplane Body", qty: 1 },
       { part_num: "Tie Fighter", sub_part_num: "Max Engine", qty: 2 },
       { part_num: "Tie Fighter", sub_part_num: "Airplane Body", qty: 1 },
    ];
    
    export const Sales: Sale[] = [
      { part_num: "X-Wing", qty: 100 },
      { part_num: "Tie Fighter", qty: 200 },
    ];
    
    function generate_report(boms: BOM[], sales: Sale[]) {
    
       let myObj = {};
       BOMs.map(bom => {
          sales.map(sale => {
              if (sale.part_num === bom.part_num)  {
                  myObj[bom.sub_part_num] = bom.qty * sale.qty  
                  myObj[bom.part_num] = sale.qty; 
    
              }
          })
      })
    
      return myObj;
    }
    
    
    // myObj {
         'Max Engine': 400,
         'X-Wing': 100,
         'Airplane Body': 200,
         'Tie Fighter': 200
       }
    

    我的测试期望myObj回来

    expect(results["Max Engine"]).toBe(100 * 4 + 200 * 2); // 800
    

    这个数字假设“X翼”的数量为400,“Tie战斗机”的数量为400。现在发生的是,我的循环覆盖了X翼最大引擎的值,只返回Tie战斗机的值,即200 X 2=400。

    如何更改代码,以便将这些值连接起来?

    1 回复  |  直到 4 年前
        1
  •  2
  •   DemiPixel    4 年前

    你想要

    myObj[bom.sub_part_num] = bom.qty * sale.qty 
    

    if (!myObj[bom.sub_part_num]) {
        myObj[bom.sub_part_num] = 0;
    }
    myObj[bom.sub_part_num] += bom.qty * sale.qty;
    

    myObj[bom.sub_part_num] = (myObj[bom.sub_part_num] || 0) + bom.qty * sale.qty