Javascript获取字符串中所有最常用的字符
我需要帮助,了解如何获取字符串中最常用的字符/字母 我的代码只适用于获取一个公共字符 但当多个字符相同时,只返回一个字符。如果两个字符是公共的,我希望它返回两个字符Javascript获取字符串中所有最常用的字符,javascript,Javascript,我需要帮助,了解如何获取字符串中最常用的字符/字母 我的代码只适用于获取一个公共字符 但当多个字符相同时,只返回一个字符。如果两个字符是公共的,我希望它返回两个字符 const x = mostCommonCharacter("abbbcddefffg"); console.log(x); // result is *b* 如果b和f是最常见的,我想返回bf 但它只返回一个最常见的字符,即“b” 我需要的是它返回“b”和“f”,因为它们都是最常见的。不仅仅是b,还有什么方法可以做到这一点吗?
const x = mostCommonCharacter("abbbcddefffg");
console.log(x); // result is *b*
如果b和f是最常见的,我想返回bf
但它只返回一个最常见的字符,即“b”
我需要的是它返回“b”和“f”,因为它们都是最常见的。不仅仅是b,还有什么方法可以做到这一点吗?获取
最高数量
,然后再次遍历对象,获取计数等于最高数量
的字母
函数最常见字符(str){
常量charHolder={};//{a:1,b:3,c:1,d:2,e:1,f:3,g:1}
str
.toLowerCase()
.拆分(“”)
.forEach(字符=>{
如果(字符!=“”){
if(charHolder[char]==null){
charHolder[char]=1;
}否则{
字符持有者[char]+=1;
}
}
});
设最高_num=0;
用于(字符夹中的常量键){
if(字符持有者[键]>最高值){
最高_num=字符持有者[键];
}
}
让res='';
for(让k进入charHolder){
if(字符持有者[k]==最高数量){
res+=k;
}
}
返回res;
}
log(mostCommonCharacter(“abbbcdeffg”)
您可以通过一个简单的更改来实现这一点。如果字母等于“highest_num”,只需将其添加到“letters”中即可
请找到一种更紧凑的方法,可以使用
Array.prototype.reduce
在将对象拆分为数组后从字符串中获取对象中的{letter:frequency}映射
然后使用Object.entries
对[key,values]的条目进行排序后,获取最频繁和第二频繁的字母:
const x=mostCommonCharacter(“abbbcdeffg”);
函数最常见字符(str){
常量dict=str.split(“”)。reduce((acc,ele)=>{
acc[ele]=(acc[ele]| 0)+1;
返回acc;
}, {});
常量字母=Object.entries(dict).sort((a,b)=>b[1]-a[1]).map(a=>a[0]);
返回letters.length>1个字母。切片(0,2)。连接(“”):letters.length>0个字母[0]:null;
}
控制台日志(x)
一种解决方案,涉及使用hashmaps
的算法方法
var a='abbbcdeffg';
常量计数器=(str)=>{
var ch={};
for(var i=0;i Object.fromEntries(Object.entries(list.sort)((a,b)=>b[1]-a[1]))
设counterInSorted=sorted(counter(a));
让getXMostOccuring=(stringObj,x)=>{
返回Object.keys(stringObj).slice(0,x).join(“”);
}
console.log(“频繁出现的前x个元素”);
日志(getXMostOccuring(counterInSorted,2));
console.log(sorted(counter(a))
在第二个字母前面添加一个'else',如果或者你会得到第一个最高字母twiceAlso,我知道OP的代码可以优化,但这不是问题的一部分。我试着专注于提供所需输出的最小可行解决方案(字符串“bf”).在第一个示例中,实际上不需要迭代两次。
function mostCommonCharacter(str) {
const charHolder = {}; // { a: 1, b: 3, c: 1, d: 2, e: 1, f: 3, g: 1 }
str
.toLowerCase()
.split("")
.forEach(char => {
if (char != " ") {
if (charHolder[char] == null) {
charHolder[char] = 1;
} else {
charHolder[char] += 1;
}
}
});
let highest_num = 0;
let letter = "";
for (const key in charHolder) {
if (charHolder[key] > highest_num) {
highest_num = charHolder[key];
letter = key;
}
}
return letter;
}
let highest_num = 0;
let letters = "";
for (const key in charHolder) {
if (charHolder[key] > highest_num) {
highest_num = charHolder[key];
letters = key;
} else if (charHolder[key] === highest_num) {
letters += key;
}
}