前端数组内根据积分要求依次扣分

        今天做的是一个听上去挺简单的需求,就是说用户在进行券码核销的时候扣除积分,如果他有工会积分,就优先扣除公会积分,不够的话呢,就扣除普通积分,要是还不够的话,就扣除充值积分,反正不管怎么样,要扣除10积分,不够就不让核销。说实话,一开始接手的时候,感觉还可以啊,也没有多难。但是当上手的时候,感觉有思路,但是感觉像是被卡住了一样,解决的不算是很优雅。先放代码

  

let points = [
        { pointType: 1, point: 8 }, //工会积分
        { pointType: 2, point: 4 }, //普通积分
        { pointType: 3, point: 8 } //充值积分
      ];
      let newPoint = [];
      let allPoint = 10; // 总的额度
      let ghPoint = points.find((v) => {
        // 工会
        return v.pointType == 1;
      });
      let chazhiPoint = allPoint - ghPoint.point; // 10-2=8
      if (chazhiPoint <= 0) {
        newPoint.push({ pointType: 1, point: 10 });
      } else {
        let ptPoint = points.find((v) => {
          // 普通
          return v.pointType == 2;
        });
        let chazhiPoint1 = chazhiPoint - ptPoint.point; // 8 - 6=2
        if (chazhiPoint1 <= 0) {
          newPoint.push({ pointType: 1, point: ghPoint.point }, { pointType: 2, point: chazhiPoint });
        } else {
          let czPoint = points.find((v) => {
            // 充值
            return v.pointType == 3;
          });
          let chazhiPoint2 = chazhiPoint1 - czPoint.point;
          if (chazhiPoint2 <= 0) {
            newPoint.push({ pointType: 1, point: ghPoint.point }, { pointType: 2, point: ptPoint.point }, { pointType: 3, point: chazhiPoint1 });
          } else {
            alert('积分不足');
          }
        }
      }
      console.log(newPoint, 'newPoint');

        先设置一个point数组来进行模拟,然后,设置一个newPoint来进行接收,再设置一个allPoint变量作为总的额度好进行扣除。

        首先利用数组的find()方法吧公会积分的对象也就是pointType == 1 的那一个对象提取出来,然后设置一个变量ghPoint来进行接收。然后用总的额度减去工会积分,用一个新变量chazhiPoint进行接收

let chazhiPoint = allPoint - ghPoint.point; 

        重头戏来了,首先if判断,如果chazhiPoint  <= 0 的话,也就是说公会积分是大于10积分的,那么直接

newPoint.push({ pointType: 1, point: 10 });

        这种操作就行了,后面就不用管了,因为他的积分够了。

        反之,如果大于0的话,就意味着积分不够,那么再次重复刚刚的操作,把普通积分ptPoint提取出来,然后把之前的chazhiPoint和普通积分相减,这里用一个新变量chazhiPoint1进行接收。

let chazhiPoint1 = chazhiPoint - ptPoint.point;

        然后还是那样子,判断这一次的差值,如果chazhiPoint1 <= 0,那么说明它的普通积分是够的,那么就

newPoint.push({ pointType: 1, point: ghPoint.point }, { pointType: 2, point: chazhiPoint });

        这个样子啦,这里公会积分就用它本来的积分,因为不够嘛,然后普通积分就用总额减去公会积分的差值,注意,这里不要用chazhiPoint1,还没有到用它的时候。

        最后呢,就是else了,就表明即使用了前两个积分还是不够10分的硬性核销标准,那么,我们只能请出充值积分了,然后用chazhiPoint2来接收chazhiPoint1减去充值积分的差值了

let chazhiPoint2 = chazhiPoint1 - czPoint.point;

        如果,chazhiPoint2 <= 0,那么还是熟悉的配方,

newPoint.push({ pointType: 1, point: ghPoint.point }, { pointType: 2, point: ptPoint.point }, { pointType: 3, point: chazhiPoint1 });

        注意,这里pointType == 2这一项的积分就用它自己本来的积分就行了,谁让他不够呢,千万别用chazhiPoint了,别搞晕了。然后最后一个就用chazhiPoint1就好了。

        如果到这里积分还是不够的话,那就没法子了,只能提示积分不够,遗憾离场!

if (chazhiPoint2 <= 0) {
            newPoint.push({ pointType: 1, point: ghPoint.point }, { pointType: 2, point: ptPoint.point }, { pointType: 3, point: chazhiPoint1 });
          } else {
            alert('积分不足');
          }

        最后看一下最终的成果

        依次排列,整整齐齐,正好10分不多,10分不少,换一下参数也是一样的

        因为前两个积分都够了,后面就不用他出来了。

        ok fine ,感谢看完

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值