javascript - 计算字符串中的所有字符

标签 javascript arrays object

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

这是我的代码:

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'));

输出:

{ b: 0, a: 3, n: 2 } 

这显然是错误的。

有人可以帮我吗?我哪里错了?

最佳答案

最小的必要更改是 obj[a[j]]=count; 应该是 obj[s]=count;,因为你有那条线正在运行内部循环的每次迭代,无论 j 是否指的是您当前正在计算的字母。

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[s]=count;
    }
  });
  return obj;
}
console.log(countAllCharacters('banana'));

但是,您不需要嵌套循环。您的外部 .forEach() 可以直接更新当前字母的计数:

function countAllCharacters(str) {
  var a = str.split("");
  var obj = {};
  a.forEach(function(s){
    obj[s] = (obj[s] || 0) + 1;
  });
  return obj;
}
console.log(countAllCharacters('banana'));

这可以用 .reduce() 缩短:

function countAllCharacters(str) {
  return str.split("").reduce(function(obj, s){
    obj[s] = (obj[s] || 0) + 1;
    return obj;
  }, {});
}
console.log(countAllCharacters('banana'));

注意 (obj[s] || 0) 表示如果 obj[s] 为真则使用它的值,否则使用 0。所以你第一次遇到一个特定的字母 obj[s] 将是 undefined,这是错误的,所以 0 将被使用。下次您遇到那个字母时 obj[s] 将是 1,这是真的。

关于javascript - 计算字符串中的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44512332/

相关文章:

php - 创建结果行的副本

javascript - 将数组转换为包含对象

javascript - 我如何找到神秘绑定(bind)的 Javascript 事件

javascript - DIV 坚持到顶部,直到被下一个 DIV 推到屏幕外

python - 如何使用 python 替换大型二维数组中存在的所有匹配数组?

php - 如何获取php对象中的键数

javascript - 方法、函数和对象

javascript - 如何从子类中的覆盖方法调用父方法

javascript - 如何使用Jquery查找最近的父元素属性值

javascript - 带有分层字段的 HTML 表单到 JSON 对象