对象排序

mac2026-09-25  12

最近有个需求是  设置会员等级与折扣

    要求是:更低的金额(等级 )不能有更高的折扣

   如 :普通会员   要求达到1000元      折扣0.8折

           黄金会员    要求达到2000元     折扣0.9折    这个就是有问题的在用户确定时要提醒用户了

 

   下面方法判断出正在设置的金额的  折扣区间

isCorrect(num) { let isCorrect = { min: 0.01,//最小折扣 max: 1//最大折扣 } //当前已经存在的会员列表 拷贝一份 let memberGradeList = JSON.parse(JSON.stringify(this.data.memberGradeList)); for (let i = memberGradeList.length - 1; i >= 0; i--) { //status == 0 表示该会员已删除 i == this.datanowIndex 时表示正在修改这个等级 if (memberGradeList[i].status == 0 || i == this.data.nowIndex) { memberGradeList.splice(i, 1); } } //根据金额排序 memberGradeList.sort((a, b) => { a.number = Number.parseFloat(a.number); b.number = Number.parseFloat(b.number); return a.number - b.number; }) // 当正在设置的金额 大于等于当前列表中最大值时 if (num >= memberGradeList[memberGradeList.length - 1].number) { isCorrect.max = memberGradeList[memberGradeList.length - 1].discount; //当正在设置的金额 小于当前列表中最小值时 } else if (num < memberGradeList[0].number) { isCorrect.min = memberGradeList[0].discount; } else { for (let j = 0; j < memberGradeList.length - 1; j++) { //memberGradeList[j].number 当前循环的金额 num 正在设置的金额 if (memberGradeList[j].number >= num) { isCorrect.max = memberGradeList[j - 1].discount; isCorrect.min = memberGradeList[j].discount; break; } else { if (j == memberGradeList.length - 2) { isCorrect.max = memberGradeList[memberGradeList.length - 2].discount; isCorrect.min = memberGradeList[memberGradeList.length - 1].discount; } } } } isCorrect.max = Number.parseFloat(isCorrect.max); isCorrect.min = Number.parseFloat(isCorrect.min); return isCorrect; } //dataValue.number 正在设置的金额 let isCorrect = that.isCorrect(dataValue.number); if (isCorrect.min > dataValue.discount || isCorrect.max <= dataValue.discount) { //util.alert 自己封装的弹窗 util.alert(`当前等级的优惠应在${isCorrect.min}~${isCorrect.max}之间`, "none", 2000); return false; }

当然如果  当前的会员列表内没有  就不用比较  直接添加

 

会员名称与条件的唯一性 这个就很简单了就不贴代码了

 

 

最新回复(0)