J

JavaScript Katas:计算字符串中每个字符的数量

2025-06-07

JavaScript Katas:计算字符串中每个字符的数量

简介🌐

我采用各个级别的有趣的套路并解释如何解决它们。

解决问题是一项重要技能,对您的职业和整个生活都如此。

你最好学会解决问题!


来源

我从不同的来源获取了有关 kata 的想法并重新编写了它们。

今日来源:Codewars


理解练习❗

首先,我们需要了解这项练习!

这是(软件)工程的关键部分。

再次查看练习说明,直到你 100% 理解为止。

不要试图在这里节省时间。

我的方法是:

  1. 输入:我输入什么?
  2. 输出:我想要得到什么?

今天的练习

编写一个函数countAmountOfEachCharacter,接受一个参数:inputString,一个有效的字符串。

该函数应该返回一个对象。该对象为字符串中至少出现一次的每个字符指定一个键。
每个键的值表示该字符在字符串中出现的次数。


输入:一个字符串。

输出:一个对象,其键为现有字符,值表示该字符在字符串中出现的次数。


思考解决方案💭

我想我理解了这项练习(=我为这项功能投入了什么以及我希望从中得到什么)。

现在,我需要从输入到输出的具体步骤。

我尝试一步步地做到这一点。

  • 循环输入字符串
  • 如果该字符以前从未出现过,则将其添加到对象中,计数为 1
  • 如果该角色之前出现过,则将其计数加 1
  • 返回包含每个键值对的对象

例子:

  • 输入:"bee"
  • 第 1 轮:{ "b": 1 }//下一个字符是“b”,它以前从未出现过,因此将其添加到计数为 1 的对象中
  • 第二轮:{ "b": 1, "e": 1 }//下一个字符是“e”,它以前从未出现过,因此将其添加到计数为 1 的对象中
  • 第 3 轮:{ "b": 1, "e": 2 }//下一个字符是“e”,它之前已经出现过,因此将其计数增加 1
  • 输出:{ "b": 1, "e": 2 }//返回包含每个键值对的对象

实现(for循环)⛑

function countAmountOfEachCharacter(inputString) {
  const returnObject = {};

  // loop over input string
  for (let i = 0; i < inputString.length; i++) {
    // check if character has been seen before
    if (returnObject.hasOwnProperty(inputString[i])) {
      // increase its count by 1
      returnObject[inputString[i]] += 1;
    } else {
      // add it to the object with a count of 1
      returnObject[inputString[i]] = 1;
    }
  }

  return returnObject;
}
Enter fullscreen mode Exit fullscreen mode

结果

console.log(countAmountOfEachCharacter("bee"));
// { b: 1, e: 2 }

console.log(countAmountOfEachCharacter("mississippi"));
// { m: 1, i: 4, s: 4, p: 2 }
Enter fullscreen mode Exit fullscreen mode

警告

如果在字符串中使用表情符号,则应避免使用普通的 for 循环。

感谢Benito van der Zander 的评论!


实现(for of 循环)⛑

function countAmountOfEachCharacter(inputString) {
  const returnObject = {};

  // loop over input string
  for (const character of inputString) {
    // check if character has been seen before
    if (returnObject.hasOwnProperty(character)) {
      // increase its count by 1
      returnObject[character] += 1;
    } else {
      // add it to the object with a count of 1
      returnObject[character] = 1;
    }
  }

  return returnObject;
}
Enter fullscreen mode Exit fullscreen mode

结果

console.log(countAmountOfEachCharacter("bee"));
// { b: 1, e: 2 }

console.log(countAmountOfEachCharacter("mississippi"));
// { m: 1, i: 4, s: 4, p: 2 }
Enter fullscreen mode Exit fullscreen mode

实现(功能)⛑

function countAmountOfEachCharacter(inputString) {
  // convert the string to an array
  return [...inputString].reduce(
    (accumulated, currentChar) =>
      // check if character has been seen before
      accumulated.hasOwnProperty(currentChar)
        ? { ...accumulated, [currentChar]: accumulated[currentChar] + 1 } // increase its count by 1
        : { ...accumulated, [currentChar]: 1 }, // add it to the object with a count of 1
    {} // start with an empty object
  );
}
Enter fullscreen mode Exit fullscreen mode

结果

console.log(countAmountOfEachCharacter("bee"));
// { b: 1, e: 2 }

console.log(countAmountOfEachCharacter("mississippi"));
// { m: 1, i: 4, s: 4, p: 2 }
Enter fullscreen mode Exit fullscreen mode

游乐场⚽

你可以在这里试用一下代码


下一部分➡️

干得好,伙计!

下次,我们将解答下一个套路。敬请期待!

如果我需要解决特定的 kata,请在这里给我留言

如果您想阅读我的最新作品,请与我联系!


进一步阅读📖


问题❔

  • 你喜欢解决 katas 吗?
  • 您更喜欢哪种实现?为什么?
  • 还有其他解决方案吗?
文章来源:https://dev.to/miku86/javascript-katas-count-the-number-of-characters-in-a-string-d5
PREV
VSCode:将文本转换为小写/大写/标题大小写
NEXT
使用 JavaScript 操作 HTML DOM