Javascript 计算字符串中的所有字符

Javascript 计算字符串中的所有字符,javascript,arrays,object,Javascript,Arrays,Object,我想计算字符串中的所有字符并将其返回给对象。我试过了,但没能得到正确的答案 这是我的代码: 函数countAllCharacters(str){ var a=str.split(“”); var obj={}; a、 forEach(函数){ var计数=0; 对于(var j=0;j而言,最小的必要更改是obj[a[j]]=count;应该是obj[s]=count;,因为无论j是否引用当前正在计数的字母,都会在内部循环的每次迭代中运行该行 函数countAllCharacters(str

我想计算字符串中的所有字符并将其返回给对象。我试过了,但没能得到正确的答案

这是我的代码:

函数countAllCharacters(str){
var a=str.split(“”);
var obj={};
a、 forEach(函数){
var计数=0;

对于(var j=0;j而言,最小的必要更改是
obj[a[j]]=count;
应该是
obj[s]=count;
,因为无论
j
是否引用当前正在计数的字母,都会在内部循环的每次迭代中运行该行

函数countAllCharacters(str){
var a=str.split(“”);
var obj={};
a、 forEach(函数){
var计数=0;

对于(var j=0;j而言,最小的必要更改是
obj[a[j]]=count;
应该是
obj[s]=count;
,因为无论
j
是否引用当前正在计数的字母,都会在内部循环的每次迭代中运行该行

函数countAllCharacters(str){
var a=str.split(“”);
var obj={};
a、 forEach(函数){
var计数=0;

对于(var j=0;j我认为,当您可以仅使用
forEach
时,您不需要使用
forEach
for
循环在一起。下面是代码

函数countAllCharacters(str){
var a=str.split(“”);
var obj={};
a、 forEach(函数){
如果(obj[s]){
obj[s]=obj[s]+1;
}否则{
obj[s]=1;
}
});
返回obj;
}

console.log(countAllCharacters('banana');
我认为您不需要同时使用
forEach
for
循环,只要您可以使用
forEach
。下面是代码

函数countAllCharacters(str){
var a=str.split(“”);
var obj={};
a、 forEach(函数){
如果(obj[s]){
obj[s]=obj[s]+1;
}否则{
obj[s]=1;
}
});
返回obj;
}

console.log(countAllCharacters('banana');
这里的问题是在计数尚未完成时分配
obj[a[j]]=count;
。您应该将
函数更改为:

  function(s){
    var count=0;
    for(var j=0;j<a.length;j++){
      if(s==a[j]){
        count+=1;
      }
    }
    obj[s]=count;
  }

这里的问题是,当计数尚未完成时,您分配了
obj[a[j]]=count;
。您应该将
函数更改为:

  function(s){
    var count=0;
    for(var j=0;j<a.length;j++){
      if(s==a[j]){
        count+=1;
      }
    }
    obj[s]=count;
  }

事实上,您可以通过更好的性能来计数,您循环的次数超过了您需要的次数

函数countAllCharacters(str){
var a=str.split(“”);
var obj={};

对于(var j=0;j实际上,您可以通过更好的性能来计数,您的循环比您需要的要多

函数countAllCharacters(str){
var a=str.split(“”);
var obj={};
对于(var j=0;j我将使用reduce操作,如下所示

const str=“香蕉”
const charCounts=Array.from(str).reduce((counts,char)=>{
计数[字符]=(计数[字符]| | 0)+1
返回计数
},Object.create(空))
info(charCounts)
我会使用reduce操作,如下所示

const str=“香蕉”
const charCounts=Array.from(str).reduce((counts,char)=>{
计数[字符]=(计数[字符]| | 0)+1
返回计数
},Object.create(空))

console.info(charCounts)
我意识到这不是最漂亮的,但我希望它能展示如何使用console来帮助调试循环

function countAllCharacters(str) {
  var a = str.split("");
  var obj = {};
  a.forEach(function(s){
  console.log(s);
    var count=0;
    for(var j in a){

      // commas can come in really handy and help avoid huge debug blocks.
      console.log('_',j,s,a[j]); 

      if(s==a[j]){
        console.log('count++');
        count++;
      }
      obj[s] = count;
    }
  });
  return obj;
}

console.log(countAllCharacters('banana'));

我意识到这并不是最漂亮的,但我希望它能展示如何使用控制台来帮助调试循环

function countAllCharacters(str) {
  var a = str.split("");
  var obj = {};
  a.forEach(function(s){
  console.log(s);
    var count=0;
    for(var j in a){

      // commas can come in really handy and help avoid huge debug blocks.
      console.log('_',j,s,a[j]); 

      if(s==a[j]){
        console.log('count++');
        count++;
      }
      obj[s] = count;
    }
  });
  return obj;
}

console.log(countAllCharacters('banana'));

您必须将
obj[a[j]=count
放入
if
语句中

这将返回正确的结果

function countAllCharacters(str) {
  var a = str.split("")
  var obj = {}
  a.forEach(function(s){
    var count=0
    for(var j=0;j<a.length;j++){
      if(s===a[j]){
        count+=1
        obj[a[j]]=count
      }
    }
  })
  return obj
}
console.log(countAllCharacters('banana'))
函数countAllCharacters(str){
变量a=str.split(“”)
var obj={}
a、 forEach(函数){
变量计数=0

对于(var j=0;j您必须将
obj[a[j]]=count
放入
if
语句中

这将返回正确的结果

function countAllCharacters(str) {
  var a = str.split("")
  var obj = {}
  a.forEach(function(s){
    var count=0
    for(var j=0;j<a.length;j++){
      if(s===a[j]){
        count+=1
        obj[a[j]]=count
      }
    }
  })
  return obj
}
console.log(countAllCharacters('banana'))
函数countAllCharacters(str){
变量a=str.split(“”)
var obj={}
a、 forEach(函数){
变量计数=0

对于(var j=0;j已经有很多朋友提交了他们的观点和很酷的解决方案。以下是我的解决方案,代码最简单:

const src='banana';
常量计数=str=>
[…str].reduce((acc,val)=>(acc[val]?(acc[val]+):(acc[val]=1,acc),{});
console.log(count(src));

。作为控制台包装器{min height:100%}
已经有很多朋友提交了他们的意见和很酷的解决方案。下面是我用最简单的代码给出的解决方案:

const src='banana';
常量计数=str=>
[…str].reduce((acc,val)=>(acc[val]?(acc[val]+):(acc[val]=1,acc),{});
console.log(count(src));

.as console wrapper{min height:100%}
为什么要使用嵌套循环?能否请您详细说明并给出正确的代码?您真的只需要
obj[s]=(obj[s]| 0)+1;
forEach
回调中。计数字符通常是用
reduce
而不是
forEach
完成的。请参阅以获取许多替代解决方案。只需放置
obj[a[j]]=count;
退出
for循环
为什么要使用嵌套循环?能否请您详细说明并给出正确的代码?您真的只需要
obj[s]=(obj[s]| 0)+1;
forEach
回调中。计数字符通常是用
reduce
而不是
forEach
完成的。请参阅以获取许多替代解决方案。只需放置
obj[a[j]]=count;
跳出
for循环
嗯,那真的很有帮助。非常感谢。那真的很有帮助。非常感谢。如果你不介意的话,我会让它更简洁一点。谢谢你的贡献。我明白了。如果你不介意的话,我会让它更简洁一点。谢谢你的贡献。我明白了