Free JavaScript course. Sign Up for tracking progress →

JavaScript: Conditions inside loops

Both the loop body and function body are places where statements are executed. So we can use everything we already learned inside it, such as conditionals.

Imagine a function that counts the number of times a letter appears in a sentence. Here's how it might work:

countChars('Fear cuts deeper than swords.', 'e'); // 4
// If there are no matches, the result is 0
countChars('Sansa', 'y'); // 0

Before examining its contents, answer these questions:

  • Is this an aggregate operation?
  • What will be the test condition for whether the character occurs?
const countChars = (str, char) => {
  let i = 0;
  let count = 0;
  while (i < str.length) {
    if (str[i] === char) {
      // Count only relevant characters
      count = count + 1;
    }
    // Counter increases no matter what happens
    i = i + 1;
  }

  return count;
};

This is an aggregate task. Although it doesn't count every character, you still have to parse through each character to calculate the sum.

A key feature of this loop is the condition inside its body. The variable count only increases when the current character matches the expected one.

Apart from that, it is a generic aggregate function that returns the number of required characters.

Instructions

The function from the theory is case-sensitive. It means 'A' and 'a' from its point of view are different characters. Write a version of this function that is not case-sensitive:

countChars('HexlEt', 'e'); // 2
countChars('HexlEt', 'E'); // 2