我有一个函数,可以将两个值转换为一个范围(在这种情况下,介于15000和100000之间)的百分比。这感觉很笨拙。有没有更简单的表达方式,这种方式容易/容易理解?
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
// Specifically these values
price = price > 100000 ? 100000 : price;
price = price < 15000 ? 15000 : price;
return (price - 1500) / 85000;
}
答案 0 :(得分:2)
您可以使用Math.min
和Math.max
来限制范围:
const adjustedPrice = Math.min(
100000, // can be no higher than 100000
Math.max(price, 15000) // can be no lower than 15000
);
return (adjustedPrice - 1500) / 85000;
另一个选择是嵌套条件,它可以减少不必要的重新分配,尽管它不能使代码更清晰:
const adjustedPrice =
price > 100000 ? 100000 :
price < 15000 ? 15000 : price
答案 1 :(得分:1)
我通常将此实用程序用于诸如此类的事情:
const clamp = (value, min, max) => value > min? value < max? value: max: min;
price2percent = (sale) => {
let price = clamp(sale.soldPrice / sale.livingArea, 15000, 100000);
return (price - 1500) / 85000;
}
我发现它比Math.min(max, Math.max(min, value))
结构更具可读性。
不利的一面是,在当前版本中,它不能与NaN
配合使用。
答案 2 :(得分:0)
有没有更简单的方式来表达这一点,这容易/容易理解?
易于理解的条件是使用if / else条件:
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
if(price > 100000) price = 100000
else if(price < 15000) price = 15000
return (price - 1500) / 85000;
}
其中的缩写可以表示为:(较难的方式)
price2percent = (sale) => {
let price = sale.soldPrice / sale.livingArea;
price = price > 100000 ? 100000 : (price < 15000 ? 15000 : price)
return (price - 1500) / 85000;
}