我创建了一个新的应用程序,用于出于科学目的比较交换所。
我需要从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));
}
当前,显示使用最受欢迎货币的次数。
答案 0 :(得分:1)
请注意,您的JSON字符串可能具有内置结构,因此比使用split()
解析性能要慢得多,该解析结构的性能要高得多。
但是,由于我不知道该结构是什么,我将采用您选择的方法。
您可以使用类似以下代码的代码,该代码将map个货币数组并返回一个对象数组。每个对象都有一个currency
属性和一个count
属性。然后,您可以通过count
属性以降序排列sort数组,这样数组中的第一项将等于或大于所有其他项。
这里的优点是您可以获取所有货币的计数,如果您在2种或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
答案 1 :(得分:0)
您可以使用映射表和reduce方法。
import glob
import os
import pandas as pd
path = 'C:/BD/KENYA/'
files = glob.glob(os.path.join(path, 'Kenya * dated *')
df_all = None
for file in files:
df = pd.read_excel(file)
if not df_all:
df_all = df
else:
df = df.append(df)
df_all.to_excel('C:/BD/KENYA/Kenya 1686 dated 20.03.19.xlsx')
答案 2 :(得分:0)
使用“符号”翻译创建对象文字。
比起您可以使用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$"}`) );