有没有一种方法可以按字母顺序在for ... in循环中对变量进行排序?

时间:2019-01-30 12:32:00

标签: javascript

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

3 个答案:

答案 0 :(得分:1)

Sort JavaScript object by key

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

答案 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>