Оптимизировать оператор if / else - PullRequest
0 голосов
/ 04 октября 2019

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

В этом упрощении у меня есть ветвь if и else, которая выполняет тот же код

async function manipulDom(e) {
  const URItwo = `https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?json`;
  let response = await fetch(URItwo);
  var data = await response.json();
  console.log(data);
  for (var key in data) {
    if (data[key].cc == "USD") {
      rateone.innerHTML =
        data[key].txt + ` ` + data[key].rate.toFixed(2) + `грн`;
      cursUSD = data[key].rate.toFixed(2);
      console.log(cursUSD);
    } else if (data[key].cc == "EUR") {
      ratetwo.innerHTML =
        data[key].txt + ` ` + data[key].rate.toFixed(2) + `грн`;
      cursEUR = data[key].rate.toFixed(2);
      console.log(cursEUR);
    } else if (data[key].cc == "PLN") {
      ratetree.innerHTML =
        data[key].txt + ` ` + data[key].rate.toFixed(2) + `грн`;
      cursPLN = data[key].rate.toFixed(2);
      console.log(cursPLN);
      return;
    }
  }
}

Ответы [ 2 ]

3 голосов
/ 04 октября 2019

Вместо этого используйте объекты, проиндексированные с помощью аббревиатур валюты:

const cursObj = {
  USD: <value of cursUSD>,
  EUR: <value of cursEUR>,
  PLN: <value of cursPLN>
};
const rateElementsByCurrency = {
  USD: rateone,
  EUR: rateTwo,
  PLN: rateThree
}

async function manipulDom(e) {
  const URItwo = `https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?json`;
  const response = await fetch(URItwo);
  const data = await response.json();
  data.forEach((obj) => {
    const { cc } = obj;
    if (cursObj[cc]) {
      cursObj[cc] = obj.rate.toFixed(2);
      rateElementsByCurrency[cc].textContent = obj.txt + ` ` + cursObj[cc] + `грн`;
      // If you're familiar with template literals, then you can do instead:
      // rateElementsByCurrency[cc].textContent = `${obj.txt} ${cursObj[cc]}грн`;
    }
  });
}

Поскольку data - это массив , а не объект, итерируйте его с помощью forEach - неиспользуйте ` for..in для перебора массивов.

Поскольку вы хотите поместить text в элементы rateElementsByCurrency, а не в HTML, вы должны использовать textContent вместо innerHTML, это безопаснее, быстрее и более предсказуемо.

0 голосов
/ 04 октября 2019

Попробуйте

1002 *
async function manipulDom(e) {
  const URItwo = `https://bank.gov.ua/NBUStatService/v1/statdirectory/exchange?json`;
  const response = await fetch(URItwo);
  const data = await response.json();
  var cc = ["USD", "EUR", "PLN"];
  var exchangeRates = {};  
  for(value of data){
      if(cc.includes(value.cc)){
          let index = cc.indexOf(value.cc);
          cc.splice(index,index+1);
          value.rate = Number(value.rate).toFixed(2);
          exchangeRates[value.cc] = value;  
      }
      if(cc.length < 1){break;}

  }
  console.log(exchangeRates);
}
manipulDom();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...