Более эффективный способ обработки чрезвычайно специфического ответа от Rest API в JavaScript - PullRequest
0 голосов
/ 25 декабря 2018

Я работаю с Dungeons & Dragons 5e API и хочу, чтобы конкретный результат обрабатывался особым образом.Пользователь может выбрать то, что искать, из ряда вариантов, и только в одном из них мне нужно будет позаботиться об ответе по-другому.В этом варианте я получаю ответ в JSON, который содержит поле «имя», в котором хранится строка, но в данном конкретном случае эта строка поставляется с аббревиатурой, и я хотел бы преобразовать ее в полное имя.боюсь просто поместить оператор am 'if' в середину кода и работать с ситуацией неэффективно, тем более, что я не нашел подобных ситуаций, чтобы иметь какую-либо ссылку.

Это часть результатаAPI, который я хочу обработать особым образом:

{"count":6,
 "results":[
    {"name":"STR",
     "url":"http://www.dnd5eapi.co/api/ability-score/1"},
    {"name":"DEX",
     "url":"http://www.dnd5eapi.co/api/ability-scores2"},
    ....
    ]
 }

Вот как я обрабатываю ответ:

fetch(fullAPIURL)
    .then(result => result.json())
    .then(data => {
        let resultContainer = document.getElementById('resultContainer');

        //Cleaning the result container from previous results
        document.querySelectorAll('#resultContainer article').forEach(container =>
            resultContainer.removeChild(container));

        spanSearchResult.classList.remove('invisible', 'searchFail');
        spanSearchResult.classList.add('searchSucess');

        spanSearchResult.innerHTML = `Search returned ${data.count} results`;

        for (element of data.results) {
            let containerTitle = element.name != undefined ? element.name : element.class;
            resultContainer.appendChild(createResultContainer(containerTitle));
        }

    })
    .catch(err => {
        spanSearchResult.classList.remove('invisible');
        spanSearchResult.classList.add('searchFail');
        spanSearchResult.innerHTML = 'Something went wrong! Details in the console';

        console.log(err);
    }); 

Действительно ли условие в этом фрагменте кода является наиболее эффективнымспособ решить эту ситуацию?

Заранее спасибо.

1 Ответ

0 голосов
/ 25 декабря 2018

Вы могли бы просто сделать поисковый вызов, на самом деле.Фактически, это было бы предпочтительнее, если вы когда-нибудь захотите перенести приложение на другой язык, например.

Определите следующее:

var retrieve = (function() {
  var items = {
    "STR": "Strength",
    "DEX": "Dexterity"
  };
  return function(item) {
    return items[item] || item;
  }
})();
    
console.log(retrieve("DEX"));

С этим вы можете просто позвонить retrieve(element.name), чтобы получить его "фактическое" имя.Вы можете добавить элементы к объекту для создания новых переводов, и если вам когда-нибудь понадобится поддержка нескольких языков, вы даже можете полностью заменить функцию.

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