2 回答
TA贡献1776条经验 获得超12个赞
我建议像这样简单地减少
var inputString = 'donald duck';
var result = inputString.split('').reduce((acc, char, index) => {
if (acc[char] !== undefined) {
acc[char] = acc[char] + 1;
}
else {
acc = { ...acc, [char]: 1 }
}
return acc
}, {})
参见: https: //jsfiddle.net/yswu91zh/21/
TA贡献1951条经验 获得超3个赞
仅递归不会给您所需的输出。递归计算字符后,您必须按频率排序,然后按字符排序。我已经从计数中排除了一堆带空格的标点符号,如果您想排除更多,只需将其添加到标点符号字符串中即可。你必须使用String.prototype.localeCompare()方法来比较字符。此方法比较当前区域设置中的两个字符串。当您使用丹麦语时,您必须将区域设置指定为da。
const punctuations = '.,:;!? ';
const countCharInString = (str, p = {}) => {
if (str.length === 0) return p;
const key = str[0].toLowerCase();
if (!punctuations.includes(key)) {
if (!p[key]) p[key] = 1;
else p[key] += 1;
}
return countCharInString(str.slice(1), p);
};
const cmp = (x, y) => {
if (x[1] === y[1]) {
return x[0].localeCompare(y[0], 'da');
}
return x[1] < y[1] ? 1 : -1;
};
const ret = Object.fromEntries(
Object.entries(countCharInString('Vi skal tælle bogstaver')).sort(cmp)
);
console.log(ret);
添加回答
举报