How it works?

const str = 'HELLO';
let result = '';
let i = 0;
 
while (i < str.length) {
  const current = str[i];
  // console.log(current)
//  console.log(i)
  ++i;
  result = `${result}${current.toLowerCase()}`
  i++;
}
console.log(result)

why does hlo display?

Because you have two increments per cycle.

Damn, how difficult it is to understand all this))

First.

To develop intuitive understanding you can take piece of paper, list all variables in columns, and put their values in rows. Each row will represent one step of the function. And then write rows with values for each of the step of the function. This is tedious work, but eventually after several excersizes your brain will see the pattern and will become able to di similar simulation without paper. All software deverlopers to such “modelling” of program execution in their heads. Of course people’s capacity to learn sich things are different.


Second.

Here is an explanation from AI, ChatGPT4. I highly recommend to use AI tools for such type of learning. They are very good at explaining code and general concepts. You can always adjust their explanation by asking to “explain as to a beginner” or “as to beginner with some experience and understanding in programmins” etc. If you don’t want to bother with openai accounts and other things you can use my tool for telegram which has quite large free access tier Telegram: Contact @experai_bot

AI explanation:

The code snippet provided is designed to iterate over the string str, which holds the value ‘HELLO’. It uses a while loop to go through each character of this string, convert it to lowercase, and then concatenate it to the result string. However, the peculiar behavior of the resulting output, in this case ‘hlo’, can be explained by examining the loop’s control flow and the operations performed within the loop.

Here’s the step-by-step breakdown of what happens in the loop:

  1. Initialization: i is initialized to 0.
  2. First Iteration (i = 0):
    • current is ‘H’.
    • i is incremented (++i), becoming 1.
    • ‘h’ is added to result.
    • i is incremented again at the end of the loop, becoming 2.
  3. Second Iteration (i = 2):
    • current is ‘L’.
    • i is incremented (++i), becoming 3.
    • ‘l’ is added to result.
    • i is incremented again at the end of the loop, becoming 4.
  4. Third Iteration (i = 4):
    • current is ‘O’.
    • i is incremented (++i), becoming 5.
    • ‘o’ is added to result.
    • i is incremented again at the end of the loop, becoming 6.

Since i is incremented twice in each iteration of the loop—once immediately after the assignment of current and once at the end of the loop block—the loop effectively skips every other character in the input string str. This results in every second character (‘E’ and ‘L’) being skipped, and why the result string is ‘hlo’ instead of the full ‘hello’.

To correct the issue and ensure that every character from the original string str is converted to lowercase and added to the result, you would need to adjust the loop control to increment i only once per iteration. Here’s how you could modify the code:

const str = ‘HELLO’;
let result = ‘’;
let i = 0;

while (i < str.length) {
const current = str[i];
result = ${result}${current.toLowerCase()};
i++; // Only increment i once per iteration
}
console.log(result); // Output should now be ‘hello’

By incrementing i only once at the end of each loop iteration, the code now processes every character in the input string, resulting in the full string ‘hello’ being printed to the console.