Нужно оптимизировать заявление - PullRequest
0 голосов
/ 03 октября 2019

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

var exchan=document.getElementById("exchan");
exchan.addEventListener("click",function(e){
	var numberOne=document.getElementById("numberOne").value;
	var numberTwo=document.getElementById("numberTwo");
	var sExchange;
	var currencyOne=document.getElementById("currencyOne").value;
	var currencyTwo=document.getElementById("currencyTwo").value;
	if(currencyOne=="UAH" && currencyTwo=="USD"){
	numberTwo.value=(numberOne/cursUSD).toFixed(2);
	}
	if(currencyOne=="UAH" && currencyTwo=="EUR"){
	numberTwo.value=(numberOne/cursEUR).toFixed(2);
	}
	if(currencyOne=="UAH" && currencyTwo=="PLN"){
	numberTwo.value=(numberOne/cursPLN).toFixed(2);
	}

},false);

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Вместо автономных переменных cursUSD, cursEUR и т. Д., Рассмотрите возможность использования объекта, проиндексированного сокращением валюты. Затем просто посмотрите коэффициент пересчета на объекте:

const conversions = {
  USD: <value of cursUSD>,
  EUR: <value of cursEUR>,
  PLN: <value of cursPLN>
};
const exchan = document.getElementById("exchan");
exchan.addEventListener("click", function(e) {
  const [numberOneVal, currencyOneVal, currencyTwoVal] = ['numberOne', 'currencyOne', 'currencyTwo']
    .map(id => document.getElementById(id).value);
  if (currencyOneVal === "UAH" && conversions[currencyTwoVal]) {
    document.getElementById("numberTwo").value = (numberOneVal / conversions[currencyTwoVal]).toFixed(2);
  }
}, false);
0 голосов
/ 03 октября 2019

Вы можете сделать чек для «currencyOne» в верхней части, так как все ваши чеки требуют этого, и он будет оценен один раз. Вы можете создать переменную для хранения значения операции, поскольку единственное изменение - это значение currencyTwo, так что у вас есть только одна строка присваивания numberTwo.value. Вы можете использовать переключатель, если if / else не подходит вам для внутренних проверок

 var curOperator;
    if(currencyOne=="UAH")
    {
     if(currencyTwo=="USD") curOperator = cursUSD; 
     else if(currencyTwo=="EUR") curOperator = cursEUR;  
     else if(currencyTwo=="PLN") curOperator = cursPLN; 
     else
        throw;
    }

    numberTwo.value=(numberOne/curOperator).toFixed(2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...