ES6过滤器根据父键返回对象键数组

时间:2018-02-21 05:39:53

标签: javascript arrays object filter ecmascript-6

我正在尝试编写一个方法,它可以帮助我根据特定国家/地区返回所有货币的对象键数组。 但是,现在,我得到的是数组中所有货币的列表。

我主要需要使用ES6方法。我不想使用任何其他迭代器。

例如:我需要的是:

当我希望根据国家/地区代码“US”应用过滤器时,它应该返回一个带有货币['USD']的数组;

const myArr = Object.keys(myJSON.countries).filter((k) => (Object.keys(myJSON.countries[k].currencies)[0]) where country === 'US');

输出: [ 'USD']

这是我之前的问题的继续 - > ES6 Map to return an array of object keys only

你可以帮助我实现这个目标吗? 这是代码:

const elem = document.getElementById('currencyList');
var myJSON = {
  "countryCode": {
  "Australia": "AU",
  "United States": "US",
  "Britain": "GB",
  "Japan": "JP",
  "India": "IND",
  "France": "FR",
  "Russia": "RS"
},
"countries": {
  "AE": {
    "currencies": {
    "AED": {
      "isDefault": true
    }
    }
  },
  "AL": {
    "currencies": {
    "ALL": {
      "isDefault": true
    }
    }
  },
  "AU": {
    "currencies": {
    "AUD": {
      "isDefault": true
    }
    }
  },
  "US": {
    "currencies": {
    "USD": {
      "isDefault": true
    }
    }
  },
  "GB": {
    "currencies": {
    "EUR": {
      "isDefault": true
    }
    }
  },
  "FR": {
    "currencies": {
    "EUR": {
      "isDefault": true
    }
    }
  },
  "JP": {
    "currencies": {
    "JPY": {
      "isDefault": true
    }
    }
  },
  "RS": {
    "currencies": {
    "RSD": {
      "isDefault": false
    }
    }
  },
  "ZA": {
    "currencies": {
    "ZAR": {
      "isDefault": true
    }
    }
  }
  }
};

function getData() {
const myArr = Object.keys(myJSON.countries).map((k) => (Object.keys(myJSON.countries[k].currencies)[0]));
console.log(myArr);		  

  for(var i=0; i< myArr.length; i++) {
  el = document.createElement('option');
  el.textContent = myArr[i];
  el.value = myArr[i];
  elem.appendChild(el);
  }	


}
<button onclick="getData()">Get Data</button>
<br />
<select id="currencyList">

</select>

1 个答案:

答案 0 :(得分:2)

根据国家/地区代码,您可以使用数组语法访问该国家/地区的JSON树。 (您可能想先检查代码是否存在)

// You could get the country code from an HTML element if you wish
const countryCode = "US";
const myArray = Object.keys(myJSON.countries[countryCode].currencies);
console.log(myArray); // ["USD"]