Улучшение или замена длинного оператора if

У меня есть оператор if, который отлично работает, однако он стал немного длинным, и мне нужна помощь, чтобы понять, как я могу уменьшить количество строк кода и, следовательно, удобочитаемость.

у меня есть defaultMonth и набор months и соответствующий price. Мне нужно добавить или снизить цену в зависимости от defaultMonth и month выбирается пользователем.

Вот несколько примеров нужных мне результатов (обратите внимание, что интервал такой же):

Если по умолчанию месяц 60 – установите цену соответственно:

Month    -     Price
60             0.0
48             0.1
36             0.2
24             0.35
12             0.5

Если по умолчанию месяц 48 – установите цену соответственно:

Month    -     Price
60             -0.1
48             0.0
36             0.1
24             0.25
12             0.4

Если по умолчанию месяц 36 – установите цену соответственно:

Month    -     Price
60             -0.2
48             -0.1
36             0.0
24             0.15
12             0.3

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

if (defaultMonth === 60) {
    if (month === 60) {
        this.price += 0.0
    }
    if (month === 48) {
        this.price += 0.1
    }
    if (month === 36) {
        this.price += 0.2
    }
    if (month === 24) {
        this.price += 0.35
    }
    if (month === 12) {
        this.price += 0.5
    }
}
if (defaultMonth === 48) {
    if (month === 60) {
        this.price -= 0.1
    }
    if (month === 48) {
        this.price += 0.0
    }
    if (month === 36) {
        this.price += 0.1
    }
    if (month === 24) {
        this.price += 0.25
    }
    if (month === 12) {
        this.price += 0.4
    }
}
if (defaultMonth === 36) {
    if (month === 60) {
        this.price -= 0.2
    }
    if (month === 48) {
        this.price -= 0.1
    }
    if (month === 36) {
        this.price += 0.0
    }
    if (month === 24) {
        this.price += 0.15
    }
    if (month === 12) {
        this.price += 0.3
    }
}
if (defaultMonth === 24) {
    if (month === 60) {
        this.price -= 0.35
    }
    if (month === 48) {
        this.price -= 0.25
    }
    if (month === 36) {
        this.price -= 0.15
    }
    if (month === 24) {
        this.price += 0.0
    }
    if (month === 12) {
        this.price += 0.15
    }
}
if (defaultMonth === 12) {
    if (month === 60) {
        this.price -= 0.5
    }
    if (month === 48) {
        this.price -= 0.4
    }
    if (month === 36) {
        this.price -= 0.3
    }
    if (month === 24) {
        this.price -= 0.15
    }
    if (month === 12) {
        this.price += 0.0
    }
}

1 ответ
1

Если бы я делал это, я бы начал с помещения данных в двумерный массив. В качестве необработанных данных это выглядит примерно так:

по умолчанию1224364860
36-0,2-0,10,00,150,3
48-0,10,00,10,250,4
600,00,10,20,350,5

Я не очень много использую JavaScript, но думаю, что в синтаксисе JavaScript это работает в таком общем порядке:

var priceTable = { 
    "36": { "12": -0.2, "24": -0.1, "36": 0.0, "48": 0.15, "60": 0.3 }, 
    "48": { "12": -0.1, "24":  0.0, "36": 0.1, "48": 0.25, "60": 0.4 }, 
    "60": { "12":  0.0, "24":  0.1, "36": 0.2, "48": 0.35, "60": 0.5 } 
};

this.price += priceTable[defaultMonth][month];

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *