Короткая (э) рука для минимального максимального процента? - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть функция, которая преобразует два значения в процент в пределах диапазона, в данном случае между 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 голосов
/ 20 ноября 2018

Я обычно использую эту утилиту для таких вещей:

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.

0 голосов
/ 20 ноября 2018

Есть ли более простой способ выразить это, что легко / легко понять?

Легко понять, будет использовать условие 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;
} 
0 голосов
/ 20 ноября 2018

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...