Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript获取字符串中所有最常用的字符_Javascript - Fatal编程技术网

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;
    }
  }