Избавиться от switch case без if else

Товарищи! Подскажите пожалуйста! Как можно переписать эту конструкцию:

switch (play.type) {
    case "tragedy":
        thisAmount = 40000;
        if (perf.audience > 30) {
            thisAmount += 1000 * (perf.audience - 30);
        }
    break;
    case "comedy":
        thisAmount = 30000;
        if (perf.audience > 20) {
            thisAmount += 10000 + 500 * (perf.audience - 20);
        }
        thisAmount += 300 * perf.audience;
    break;
    default: throw new Error(`неизвестный тип: ${play.type}`);
}

не используя if else ?

Можно попробовать что-нибудь такое:

const plays = {
	tragedy: (audience) => {
		audience = Math.max(audience, 30);
		return 40000 + 1000 * (audience - 30)
	},
	comedy: (audience) => {
		audience = Math.max(audience, 20);
		const total = 30000 + 500 * (audience - 20);
		return audience > 20 ? total + 10000 : total; // один if-else все-таки есть
	}
}

try {
	thisAmount = plays[play.type](perf.audience);
} catch(error) {
	throw new Error(неизвестный тип: ${play.type});
}

Но тут хотелось бы вспомнить про троллейбус из буханки хлеба: это можно сделать, но зачем?

1 лайк

Задание такое :)