我正在尝试为网页设置货币转换器应用程序。我正在使用API,得到的响应是按字母顺序排列的变量,但是我了解使用for ... in循环会随意获取我要查找的变量。有没有办法在我得到它们的同时按字母顺序对它们进行排序,同时保持...在结构上相同?
function loadCurrency(){
let from = document.getElementById('from');
let to = document.getElementById('to');
let xHttp = new XMLHttpRequest();
xHttp.onreadystatechange = function(){
if(xHttp.readyState === 4 && xHttp.status === 200) {
let obj = JSON.parse(this.responseText);
let options = '';
for(key in obj.rates){
options = options+'<option>'+key+'</option>';
}
from.innerHTML = options;
to.innerHTML = options;
}
};
xHttp.open('GET','https://api.exchangeratesapi.io/latest',true);
xHttp.send();
}
答案 0 :(得分:1)
请查看上面的链接。它有同样的问题。基本上,它将对象的所有键提取到一个数组中,然后对其进行排序并逐一使用。同样也可以为您工作。
答案 1 :(得分:0)
您可以按for..in之前的名称(假设objs.rates具有属性名称)按字母顺序对货币列表进行排序
function compare(a,b) {
if (a.name < b.name)
return -1;
if (a.name > b.name)
return 1;
return 0;
}
objs.rates.sort(compare);
答案 2 :(得分:0)
如果您尝试为您的select元素生成选项数组,我会做些不同的事情:
var rates = {
USD: 1,
GBP: 0.78,
EUR: 0.87
};
var options = Object.keys(rates).sort().reduce((options, currency) => options+=`<option value="${currency}">${currency}</option>`, this[0]);
document.querySelector('#currencies').innerHTML = options;
<select id="currencies"></select>