Javascript 有没有办法按字母顺序排列for…in循环中的变量?
我正在尝试为网页设置货币转换器应用程序。我使用的是API,得到的响应是按字母顺序排列的变量,但我知道使用for…in循环会任意地得到我要查找的变量。有没有一种方法可以在我得到它们之后按字母顺序排列它们,同时在结构上保持不变Javascript 有没有办法按字母顺序排列for…in循环中的变量?,javascript,Javascript,我正在尝试为网页设置货币转换器应用程序。我使用的是API,得到的响应是按字母顺序排列的变量,但我知道使用for…in循环会任意地得到我要查找的变量。有没有一种方法可以在我得到它们之后按字母顺序排列它们,同时在结构上保持不变 function loadCurrency(){ let from = document.getElementById('from'); let to = document.getElementById('to'); let xHttp = new X
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();
}
请查看上面的链接。它也有同样的问题。基本上,它将对象的所有键提取到一个数组中,然后对其进行排序并逐个使用。这同样适用于您。您可以按照名称的字母顺序对货币列表进行排序,假设objs.rates在for..in之前有一个属性名称
function compare(a,b) {
if (a.name < b.name)
return -1;
if (a.name > b.name)
return 1;
return 0;
}
objs.rates.sort(compare);
如果您试图为select元素生成选项数组,我会做稍微不同的操作: 风险值比率={ 美元:1, 英镑:0.78, 欧元:0.87 }; var options=Object.keysrates.sort.reduceoptions,currency=>options+=`${currency}`,此[0]; document.querySelector'currences'.innerHTML=options;
什么是obj.rates?对象?for…in将获取对象的属性。反过来,对象属性没有固有的顺序。遍历它们可以保证不会得到重复项,而不会得到其他项。问题不在于…in,而在于JS对象。是的,Nik,它是一个保存我试图列出的变量的对象。如果rates是一个数组,只需使用array.sort。如果它是一个对象,则需要在生成的数组上使用object.keys.sort和forEach来强制您按顺序选择属性。如果排序和顺序很重要,还可以考虑切换到使用数组。如果集合是包含对象或值的数组,而不是包含数组或其他对象的数组,则更容易使用集合,因为您可以访问所有数组方法。如果objs.rates是数组而不是对象,则可以使用此方法。此外,调用不带参数的排序已经按字母升序排序。定义这个比较器是多余的,因为它同样是多余的。这在按字母顺序排序列表方面起到了很好的作用。但是,我现在遇到的问题是,from和to select标记的长度等于0,因此,我无法替换API URL中的这两个变量,使其无法正确转换货币。我也根据您的代码解决了这个问题。花了一点时间去弄清楚哪里出了问题,但最终还是成功了。再次感谢您的回复!