我创建了一个新的应用程序,用于比较交换所的科学目的。
我需要从JSON文本中进行选择,这是(€,CHF,SEK,$,$(之间最常用的值,并将其显示为此值之一(EURO,FRANK,KORONA,DOLAR,FUNT(。
function myFunction() {
text = localStorage.getItem("userHistory");
obj = JSON.parse(text);
var iloscEuro = (text.split("€").length -1);
var iloscCHF = (text.split("CHF").length -1);
var iloscSEK = (text.split("SEK").length -1);
var iloscDolar = (text.split("$").length -1);
var iloscFunt = (text.split("£").length -1);
alert(Math.max(iloscEuro, iloscCHF, iloscSEK, iloscDolar, iloscFunt));
}
目前,显示使用最流行货币的次数。
应该注意的是,您的 JSON 字符串可能具有内置结构,这使得解析性能比使用非常慢的split()
要高得多。
但是,由于我不知道该结构是什么,因此我将采用您选择的方法。
您可以使用类似于以下代码的内容,它将映射货币数组并返回对象数组。每个对象都有一个currency
属性和一个count
属性。然后,可以按 count
属性降序对数组进行排序,因此数组中的第一项将等于或大于所有其他项。
这里的优点是您可以获得所有货币的计数,如果您在 2 种或更多货币之间具有最大的表示形式,这可能会很有用。
const text = `{"values": [ '€123', 'CHF123', 'CHF456', 'SEK123', '$123', '£123' ]}`;
const currencies = ["€", "CHF", "SEK", "$", "£"];
const counts = currencies
.map(
currency =>
({
currency,
count: text.split(currency).length -1,
})
)
.sort(
(l, r) =>
r.count - l.count
);
console.log( counts );
如果您只是想要最好的,您可以从阵列中获取它:
counts[0].currency
您可以使用映射表和 reduce 方法。
const text = "CHF CHF CHF € €";
const mappingTable = { "€": "EURO", "CHF": "FRANK" };
let maxOccurenceCount = 0;
const mostFrequentKey = Object.keys(mappingTable).reduce((bestKeySoFar, currentKey) => {
const currentOccurenceCount = text.split(currentKey).length - 1;
if (currentOccurenceCount > maxOccurenceCount) {
maxOccurenceCount = currentOccurenceCount;
return currentKey;
}
return bestKeySoFar;
}, mappingTable[0]);
console.log(mappingTable[mostFrequentKey])
使用符号翻译创建对象文字。
比您可以使用String.prototype.match()
来计算字符串中的出现次数
const symb = {'€':'EURO', 'CHF':'FRANK', 'SEK':'KORONA', '$':'DOLAR', '£':'FUNT',};
function countExc(text) {
const obj = JSON.parse(text), res = {};
for(k in obj) res[symb[k]] = (obj[k].match(new RegExp(`\${k}`,'g')) || []).length;
return res;
}
console.log( countExc(`{"CHF":"1CHF 2CHF", "€":"100€", "$":"1$ 2$ 4$"}`) );