数组排序,选出最优选择

话不多说,先讲需求吧。
我们都会遇到这样一个场景:在天猫或者京东中,优惠券的使用,假设你的个人账户有好多优惠券,那么当消费满减的时候,会有一个最优的选择。
举个栗子:你消费50元,现在你有3张优惠券,分别是:满20减5块,满10块减10块,满30减5块。请写出使用优惠券的方案::1(满20减5块,满30减5块==一共减了10块),2(满20减5块,满10块减10块==一共减了15)3.(满20减5块,满10块减10块,满30减5块==减了20块)但是第三种选择:满20,满10块,满30块的总金额是60元,已经超过了50元,所以第三种 选择pass掉。现在剩下 1,2两种选择,这两个 里边有个最优选择:就是选择2.
好了,需求说清楚,剩下的就是代码了。

$.ajax({
         type:"post",
         url:basePath+"url",
         dataType:"json",
         async:false,
         success:function(jsondata){
             if(jsondata.code==1){
                 if(jsondata.obj.cashTicketList.length>0){
                     couponNum(jsondata);//ajax回调
                 }else{
                     //没有优惠券
                     $(".invest-top1px").fadeOut();
                 }

             }
         },
         error: function(XMLHttpRequest, textStatus, errorThrown) {
         console.log(XMLHttpRequest.status)
        }
    });
    function couponNum(jsondata){
        arrList =jsondata.obj.cashTicketList;
        if(arrList.length==""||arrList.length==null){
            //优惠券不现实
            $("#needcoupon").fadeOut();
        }else{
            createCouponList(arrList);//展示后台返回数据
        }


    }


         var b=arrList.concat();
         b.sort(sortByProperty);
         getingo(b);


    }


    //自定义排序映射返回数据
    function getingo(b){
        for(var i=0;i<b.length;i++){
              if(InvestmentAmount>=b[i].investMiniAmount){
                  for(var j=0;j<arrList.length;j++){
                             if(arrList[j]==b[i]){
 //自动选择可选元素                             $("#couponList").find("li").eq(j).find("span").find("input").removeClass("input_default").addClass("input_light").attr("data-maskNum","1"); 

                             }else{

                             }
                      }



               }else{
                      //不能选择

               }
        }
  }//自定义排序映射返回数据
   //展示后台返回数据结束
  //数组对象自定义排序
    function sortByProperty (obj1, obj2){
            var valage = obj1.amount;
            var valmoney = obj1.investMiniAmount;
            var valageT = obj2.amount;
            var valmoneyT = obj2.investMiniAmount;
            var valZ=valage/valmoney;//比值
            var valO=valageT/valmoneyT
            if (valZ < valO) {
                   return 1;
            } else if (valZ > valO) {
                   return -1;
            } else if(valZ==valO) {
                    if(valage<valageT){
                            return 1;
                    }else if(valage>valageT){
                            return -1;
                    }else if(valage==valageT){
                        var valTime= obj1.expireTime;
                        var valTimeT=obj2.expireTime;
                        valTime = new Date(valTime);
                        valTimeT = new Date(valTimeT);
                        if(valTime<valTimeT){
                                return -1;
                        }else if(valTime>valTimeT){
                                return 1;
                        }else{
                                return 0;
                        }
                    }else{
                        return 0;
                    }
              }else{
                  return 0;
              }    
       }
  //自定义排序结束

好了,就这样了,以后再后续补充。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值