处理来自JavaScript中的Rest API的极其特定的响应的更有效方法

时间:2018-12-25 00:53:47

标签: javascript json rest

我正在使用Dungeons&Dragons 5e API,希望以特殊的方式处理特定的结果。用户可以从一系列选项中选择要搜索的内容,而在其中只有一个选项中,我需要以其他方式处理答案。在此选项中,我得到的JSON答案中包含一个'name'字段,该字段存储一个String,但在此特定情况下,此String带有首字母缩写词,我想将其转换为全名。害怕只是在代码中间放一个'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 :(得分:2)

实际上,您可以打电话查询。实际上,如果您想将应用程序移植到另一种语言,那将是更好的选择。

定义以下内容:

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

这样,您只需调用retrieve(element.name)即可检索其“实际”名称。您可以在对象中添加元素以创建新的翻译,并且如果您需要支持多种语言,甚至可以完全替换该功能。