Javascript 获取支持的货币列表

Javascript 获取支持的货币列表,javascript,node.js,internationalization,currency,ecmascript-next,Javascript,Node.js,Internationalization,Currency,Ecmascript Next,除了猜测(就像我在下面所做的那样),是否有一种更直接、更有效的方法可以反射地检索JavaScript环境支持的所有货币的列表 函数getSupportedCurrences(){ 函数$(金额、货币){ 让locale='en-US'; 让选项={ 风格:“货币”, 货币:货币,, 当前显示:“名称” }; 返回Intl.NumberFormat(区域设置、选项).format(金额); } 常量getAllPossibleThreeLetterWords=()=>{ 常量字符='ABCDEF

除了猜测(就像我在下面所做的那样),是否有一种更直接、更有效的方法可以反射地检索JavaScript环境支持的所有货币的列表

函数getSupportedCurrences(){ 函数$(金额、货币){ 让locale='en-US'; 让选项={ 风格:“货币”, 货币:货币,, 当前显示:“名称” }; 返回Intl.NumberFormat(区域设置、选项).format(金额); } 常量getAllPossibleThreeLetterWords=()=>{ 常量字符='ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 常数arr=[]; 让text=''; for(设i=0;iconst rx=/(?您可以通过以下XML加载已知列表:

列表可在此处找到:


大不列颠及北爱尔兰联合王国
英镑
英镑
826
2.
美利坚合众国
美元
美元
840
2.
var xmlString=getSampleCurrencyXml();
var xmlData=(new window.DOMParser()).parseFromString(xmlString,“text/xml”);
var knownCodes=[].slice.call(xmlData.querySelectorAll('Ccy')).map(n=>n.textContent)
//取而代之的是提取XML?
取('https://www.currency-iso.org/dam/downloads/lists/list_one.xml“,{cache:'default'})
.then(response=>response.text())
.then(xmlStr=>(new window.DOMParser()).parseFromString(xmlStr,“text/xml”))
.then(data=>knownCodes=data);//这在堆栈代码段中可能不起作用
log(getSupportedCurrences().map(c=>c.code+'\t'+c.name).join('\n'));
函数getSupportedCurrences(){
函数$(金额、货币){
返回国际编号格式('en-US'{
风格:“货币”,
货币:货币,,
currencyDisplay:'名称'
}).格式(金额);
}
返回knownCodes.reduce((货币,当前)=>{
返回(输出=>{
返回输出。替换(/^[^]+/,“”)!==cur?
海螺({
代码:cur,

名称:output.match(/(?正如公认的答案所提供的那样,详尽的测试可能是这里最合理的实用方法。此外,新货币不会出现,旧货币不会消亡,并且有特定的频率。任何实现所支持的货币都是最新的,几乎总是会反映现实。因此,试试看的方法h真的不会失败很多


但从规范方面进一步阐述,规范实际上只关心货币是否“格式良好”:三个ASCII字母。如果生成的代码是一种已知的货币,那么您将获得相应的行为。否则,您将获得代码本身的大致优雅的回退。因此,有争议的是,不需要公开受支持的列表:货币代码至少对许多用户来说是一种相对可以理解的东西,就像在大多数UI中看到的那样涉及价格或成本的ke“3 USD”或“5 CAD”通常意味着用户的货币。

我没有提交此代码供审查。我只是提供了一个效率低下的示例(如果不是这样的话,这将是一个一句话的问题)。有趣的问题。但这有关系吗?
Intl.NumberFormat()
,如果没有指定区域设置,将使用用户计算机的默认设置,这几乎总是我需要的,因此我很好奇为什么您需要用户计算机安装的区域设置的完整列表。@Shilly,它不是所有区域设置,而是所有货币。不是来自计算机,而是来自当前环境。也许我们可以提供一个版本例如,是否让powershell或bash脚本将所有可用的区域设置作为环境变量注入节点?因为至少powershell可以在所有已安装的区域设置上循环。或者这会比测试所有字母代码更糟糕吗?您可能希望筛选该列表中具有
IsFund=“true”的所有内容
和任何以
X开头的货币代码,因为它们不是真正的货币。