获取支持的货币列表 [英] Get List of Supported Currencies
本文介绍了获取支持的货币列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
除了猜测(就像我在下面所做的那样)以外,还有没有更直接和有效的方法反思性地检索JavaScript环境支持的所有货币的列表?
Other than just guessing (like I've done below), is there a more direct and efficient way of reflectively retrieving a list of all currencies supported by your JavaScript environment?
function getSupportedCurrencies() {
function $(amount, currency) {
let locale = 'en-US';
let options = {
style: 'currency',
currency: currency,
currencyDisplay: "name"
};
return Intl.NumberFormat(locale, options).format(amount);
}
const getAllPossibleThreeLetterWords = () => {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
const arr = [];
let text = '';
for (let i = 0; i < chars.length; i++) {
for (let x = 0; x < chars.length; x++) {
for (let j = 0; j < chars.length; j++) {
text += chars[i];
text += chars[x];
text += chars[j];
arr.push(text);
text = '';
}
}
}
return arr;
};
let ary = getAllPossibleThreeLetterWords();
let currencies = [];
const rx = /(?<= ).+/; // This line doesn't work in Firefox versions older than version 78 due to bug 1225665: https://bugzilla.mozilla.org/show_bug.cgi?id=1225665
ary.forEach((cur) => {
let output = $(0, cur).trim();
if (output.replace(/^[^ ]+ /, '') !== cur) {
let obj = {};
obj.code = cur;
obj.name = output.match(rx)[0];
currencies.push(obj);
}
});
return currencies;
}
console.log(getSupportedCurrencies());
推荐答案
您可以通过以下XML加载已知列表:
You could load a known list via this XML:
https://www.currency-iso.org/dam/downloads/lists/list_one .xml
可在此处找到列表:> https://www.currency-iso.org/en/home/tables/table-a1.html
<ISO_4217 Pblshd="2018-08-29">
<CcyTbl>
<CcyNtry>
<CtryNm>
UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (THE)
</CtryNm>
<CcyNm>Pound Sterling</CcyNm>
<Ccy>GBP</Ccy>
<CcyNbr>826</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
<CcyNtry>
<CtryNm>UNITED STATES OF AMERICA (THE)</CtryNm>
<CcyNm>US Dollar</CcyNm>
<Ccy>USD</Ccy>
<CcyNbr>840</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
</CcyTbl>
</ISO_4217>
var xmlString = getSampleCurrencyXml();
var xmlData = (new window.DOMParser()).parseFromString(xmlString, "text/xml");
var knownCodes = [].slice.call(xmlData.querySelectorAll('Ccy')).map(n => n.textContent)
// Fetch the XML instead?
fetch('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); // This may not work in the Stack Snippet
console.log(getSupportedCurrencies().map(c => c.code + '\t' + c.name).join('\n'));
function getSupportedCurrencies() {
function $(amount, currency) {
return Intl.NumberFormat('en-US', {
style: 'currency',
currency: currency,
currencyDisplay: 'name'
}).format(amount);
}
return knownCodes.reduce((currencies, cur) => {
return (output => {
return output.replace(/^[^ ]+ /, '') !== cur ?
currencies.concat({
code: cur,
name: output.match(/(?<= ).+/)[0]
}) :
currencies;
})($(0, cur).trim());
}, []);
}
function getSampleCurrencyXml() {
return `
<ISO_4217 Pblshd="2018-08-29">
<CcyTbl>
<CcyNtry>
<CtryNm>
UNITED KINGDOM OF GREAT BRITAIN AND NORTHERN IRELAND (THE)
</CtryNm>
<CcyNm>Pound Sterling</CcyNm>
<Ccy>GBP</Ccy>
<CcyNbr>826</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
<CcyNtry>
<CtryNm>UNITED STATES OF AMERICA (THE)</CtryNm>
<CcyNm>US Dollar</CcyNm>
<Ccy>USD</Ccy>
<CcyNbr>840</CcyNbr>
<CcyMnrUnts>2</CcyMnrUnts>
</CcyNtry>
</CcyTbl>
</ISO_4217>
`;
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
如果您仍然想生成代码,则可以使用可迭代的产品。
If you want to generate the codes still, you can use a product iterable.
以下内容基于Python的 itertools.product
函数。
The following is based on Python's itertools.product
function.
let ary = product('ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''), 3).map(a => a.join(''));
function product(iterables, repeat) {
var argv = Array.prototype.slice.call(arguments), argc = argv.length;
if (argc === 2 && !isNaN(argv[argc - 1])) {
var copies = [];
for (var i = 0; i < argv[argc - 1]; i++) { copies.push(argv[0].slice()); }
argv = copies;
}
return argv.reduce((accumulator, value) => {
var tmp = [];
accumulator.forEach(a0 => value.forEach(a1 => tmp.push(a0.concat(a1))));
return tmp;
}, [[]]);
}
演示
Demo
console.log(getSupportedCurrencies().map(c => c.code + '\t' + c.name).join('\n'));
function getSupportedCurrencies() {
function $(amount, currency) {
return Intl.NumberFormat('en-US', {
style: 'currency',
currency: currency,
currencyDisplay: 'name'
}).format(amount);
}
let ary = product('ABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''), 3).map(a => a.join(''));
return ary.reduce((currencies, cur) => {
return (output => {
return output.replace(/^[^ ]+ /, '') !== cur
? currencies.concat({ code : cur, name : output.match(/(?<= ).+/)[0] })
: currencies;
})($(0, cur).trim());
}, []);
}
function product(iterables, repeat) {
var argv = Array.prototype.slice.call(arguments), argc = argv.length;
if (argc === 2 && !isNaN(argv[argc - 1])) {
var copies = [];
for (var i = 0; i < argv[argc - 1]; i++) { copies.push(argv[0].slice()); }
argv = copies;
}
return argv.reduce((accumulator, value) => {
var tmp = [];
accumulator.forEach(a0 => value.forEach(a1 => tmp.push(a0.concat(a1))));
return tmp;
}, [[]]);
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
这篇关于获取支持的货币列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文