JavaScript |返回字符串中最常见的多个字符



所以我正在学习如何返回字符串中最常见的字符。如果只有一个字符出现最多,我知道该怎么做 - e.i,"javascript"中的"a"出现两次,其余字符只出现一次。但是如果字符串是"javascript prototype",则有两个字符出现最多,即"p"和"t"。我正在使用 _.invert(( 来获取字母出现最多的数字的值,虽然由于"p"和"t"都等于 3,那么我可以返回它们。我预计输出是"p t"

// Return the character that is most common in a string
// ex. maxCharacter('javascript') == 'a'
// Return multiple characters that are most common in a string
// ex. maxCharacter('javascript prototype') == 'p t'
function maxCharacter(str) {
const charMap = {};
let maxNum = 0;
let maxChar = '';
str.replace(/s/gi, '').split('').forEach(function(char){
if(charMap[char]){
charMap[char]++;
} else {
charMap[char] = 1;
}
});

for(let char in charMap){
if(charMap[char] > maxNum) {
maxNum = charMap[char];
maxChar = (_.invert(charMap))[maxNum];
}
}
return maxChar;
}
// Call Function
const output = maxCharacter('javascript prototype');
console.log(output);

通过将Object.values()分散到Math.max()中找到charMap中的最大数字。然后使用Array.filter()获取具有最大值的键,并用空格连接它们:

function maxCharacter(str) {
const charMap = {};
str.replace(/s/gi, '').split('').forEach(function(char){
if(charMap[char]){
charMap[char]++;
} else {
charMap[char] = 1;
}
});

const max = Math.max(...Object.values(charMap));

return Object.keys(charMap)
.filter((c) => charMap[c] === max)
.join(' ');
}
console.log(maxCharacter('javascript')); // a
console.log(maxCharacter('javascript prototype')); // p t

最新更新