缩短(最小)最大百分比百分比?

时间:2018-11-20 10:55:21

标签: javascript ecmascript-6

我有一个函数,可以将两个值转换为一个范围(在这种情况下,介于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;
} 

3 个答案:

答案 0 :(得分:2)

您可以使用Math.minMath.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;
}