我正在使用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);
});
在此代码段中添加条件确实是解决这种情况的最有效方法吗?
谢谢。
答案 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)
即可检索其“实际”名称。您可以在对象中添加元素以创建新的翻译,并且如果您需要支持多种语言,甚至可以完全替换该功能。