如何选择和显示最常用的字符串



我创建了一个新的应用程序,用于比较交换所的科学目的。

我需要从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$"}`) );

最新更新