业务场景:
在批发类网站购物,有最小起批数量要求,假如数量val小于最小的起批数startQuantity,不予售卖,单价为空。
假如一次买多个产品,商家给予单价让利,买得越多单价越低。
这时候我们需要用数量val和价格区间arr对比,确定最终单价。
// arr结构为
let arr= [{startQuantity: 2, price: 23.75},
{startQuantity: 10, price: 22.33},
{startQuantity: 50, price: 21.38}]
//val为外面传进来的数量
优化前:(嵌套多,可读性差)
getPrice(val,arr) {
if (arr.length && val) {
for (let i = arr.length - 1; i >= 0; i--) {
if (i === 0) {
if (+val >= +arr[i].startQuantity) {
return arr[i].price
} else {
return ''
}
} else {
if (+val >= +arr[i].startQuantity) {
return arr[i].price
}
}
}
} else {
return ''
}
}
第一次优化后:
getPrice(val, arr) {
if (!arr.length || !val) {
return ''
}
if (val < arr[0].startQuantity) { return '' }
for (let i = arr.length - 1; i >= 0; i--) {
if (+val >= +arr[i].startQuantity) {
return arr[i].price
}
}
}
第二次优化后:
getPrice(val = 0, arr = []) {
let price = ''
const q = Number(arr[0]?.startQuantity)
if (!Number.isNaN(q) && q <= Number(val)) {
for (let i = arr.length - 1; i >= 0; i--) {
const { startQuantity } = arr[i]
if (Number(val) >= Number(startQuantity)) {
price = arr[i].price
return price
}
}
}
return price
}