【问题标题】:How can I add values to an object without overwriting the previous one in a loop?如何在不覆盖循环中的前一个的情况下向对象添加值?
【发布时间】:2021-11-27 23:06:00
【问题描述】:

取以下代码:

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-Wing”的数量为 400,“Tie Fighter”的数量为 400。发生的事情是我的循环正在覆盖 X 翼中 Max Engine 的值,并且只返回 Tie Fighter 的值,即 200 x 2 = 400。

如何更改我的代码以便连接这些值?

【问题讨论】:

  • 不应该是boms.map 而不是BOMs.map。
  • 不,看第一个函数。
  • generate_report 是第一个函数,它有一个未使用的参数boms。
  • 是的,好点。我必须在函数内部循环导出函数。

标签: typescript loops object


【解决方案1】:

你想要

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

【讨论】:

    猜你喜欢
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 2019-08-15
    • 2015-10-11
    • 2014-02-25
    相关资源
    最近更新 更多