浅拷贝的坑

需求:groupPriceModeList是数组,需要给每个item的priceModeList中每项添加一个taxUnitPrice,需要用到item的tax来计算

错误写法:

 requestDetailList.forEach((item: any) => {
        item.manHourUnitPrice = GroupManHourUnitPrice
        item.priceModeList = groupPriceModeList
        item.priceModeList.forEach((priceModeItem: any) => {
          priceModeItem.tax = item.tax
          priceModeItem.taxUnitPrice =
            priceModeItem.efficiency !== '0.000'
              ? ((GroupManHourUnitPrice / priceModeItem.efficiency) * (1 + item.tax)).toFixed(3)
              : (0.0).toFixed(3)
        })
      })

问题:这样导致所有priceModeItem的taxUnitPrice被最后一次循环的值覆盖

原因:item.priceModeList = groupPriceModeList 是浅拷贝,每次操作都会修改原对象,因此会存储最后一个priceModeItem的taxUnitPrice,页面上显示的也都是最后一个priceModeItem的taxUnitPrice

解决:

requestDetailList.forEach((item: any) => {
        item.manHourUnitPrice = GroupManHourUnitPrice
        item.priceModeList = groupPriceModeList.map((priceModeItem: any) => {
          const { efficiency } = priceModeItem
          const taxUnitPrice =
            efficiency !== '0.000'
              ? ((GroupManHourUnitPrice / efficiency) * (1 + item.tax)).toFixed(3)
              : (0.0).toFixed(3)
          return { ...priceModeItem, taxUnitPrice }
        })

每次map后会生成一个新的数组给item.priceModeList ,就不会被覆盖了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值