Javascript - улучшение вложенного if-else - PullRequest
0 голосов
/ 08 ноября 2018

У меня ужасно гнездится если. В будущем может быть еще больше строк.

if (people < 10) {
    price = 500;
} else if (people >= 10 && people < 25) {
    price = 350;
} else if (people >= 25 && people < 100) {
    price = 250;
} else if (people >= 100) {
    price = 200;
}

Цена падает по мере увеличения объема. Как мне реорганизовать это, чтобы сделать его более удобным для чтения / чтения?

Редактировать: я попробовал переключатель, и он был не лучше?

Ответы [ 5 ]

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

Я бы предпочел вместо многих, если использовать условие переключения, как показано ниже

function getPrice(people)
{
    switch(true){
        case people<10: return 500;
        case people<25: return 350;
        case people<100: return 250;
        default: return 200;
    }

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

function applyConf(v) {
  return [{
    // false means infinite
    min: false,
    max: 9,
    value: 500,
  }, {
    min: 10,
    max: 24,
    value: 350,
  }, {
    min: 25,
    max: 99,
    value: 250,
  }, {
    min: 100,
    max: false,
    value: 200,
  }].find(({
    min,
    max,
  }) => (min === false || v >= min) && (max === false || v <= max)).value;
}

console.log(applyConf(-10));
console.log(applyConf(8));
console.log(applyConf(20));
console.log(applyConf(80));
console.log(applyConf(100));
console.log(applyConf(100000));
0 голосов
/ 08 ноября 2018

Ну, вам не нужен чек на >=, когда чек останется в этой форме:

if (people < 10) {
    price = 500; 
} else if (people < 25) { 
    price = 350;
} else if (people < 100) { 
    price = 250; 
} else { 
    //people count is implicitly greater than 100
    price = 200; 
}

На каждом (следующем) шаге количество людей неявно больше, чем предыдущая проверка, например. если people < 10 приводит к false, то значение неявно больше 9 или >= 10. По этой причине повторная проверка не требуется, и поэтому может быть опущена.

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

Одним из вариантов будет использование массива, который определяет пороговые значения, затем .find соответствующее значение в массиве. Это будет очень кратко, особенно когда есть много порогов:

const thresholds = [
  [100, 200], // need 100+ people for the price to be 200
  [25, 250], // else need 25+ people for the price to be 250
  [10, 350],
  [0, 500]
];
function findPrice(people) {
  return thresholds.find(([limit]) => people >= limit)[1];
}

console.log(findPrice(53)); // 53 people
console.log(findPrice(25));
console.log(findPrice(24));
0 голосов
/ 08 ноября 2018

Вы можете взять функцию с ранним выходом. Предыдущая проверка является условием для следующей проверки или получения максимального результата.

Преимущество состоит в том, чтобы предотвратить цепочки операторов else if и обеспечить лучшую поддержку.

function getPrice(people) {
    if (people < 10) {
        return 500;
    } 
    if (people < 25) {
        return 350;
    }
    if (people < 100) {
        return 250;
    }
    return 200;
}

var price = getPrice(people);

Больше читать:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...