最近有个需求是 设置会员等级与折扣
要求是:更低的金额(等级 )不能有更高的折扣
如 :普通会员 要求达到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; }当然如果 当前的会员列表内没有 就不用比较 直接添加
会员名称与条件的唯一性 这个就很简单了就不贴代码了
