Javascript 有没有办法按字母顺序排列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

我正在尝试为网页设置货币转换器应用程序。我使用的是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();
}

请查看上面的链接。它也有同样的问题。基本上,它将对象的所有键提取到一个数组中,然后对其进行排序并逐个使用。这同样适用于您。

您可以按照名称的字母顺序对货币列表进行排序,假设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中的这两个变量,使其无法正确转换货币。我也根据您的代码解决了这个问题。花了一点时间去弄清楚哪里出了问题,但最终还是成功了。再次感谢您的回复!