How can a string be iterated using a for of() method and a indexOf() method to find certain indexes and getting the expected results?

Viewed 30

I'm trying to iterate a string, using a for of, in order to determine the indexes of the empty spaces that the string has, and log to console these indexes. I have a string that contains 4 white(or empty?) spaces, so using this for of method and making use of indexOf(), I'm expecting to see in console 4 different indexes numbers, however, the behavior is weird and it logs the index of the first white space found, for every white space found later. What could be causing this?

Here's a 'running snippet'.

const tipo = 'Quimes Bajo Cero  ';
    
    
for(char of tipo){
  char === ' ' ? console.log(tipo.indexOf(char)) : console.log('this character is not empty space');
}

Thank folks.

3 Answers

That is because indexOf method returns the index of the first matching char in a string so in your case black's first match is at the 6th index. Read the Definition and Usage

you can use forEach, transform the string and loop

const tipo = 'Quimes Bajo Cero  ';
[...tipo].forEach((char, index) => char === ' ' ? console.log(index) : console.log('this character is not empty space')
)

Does it have to be implemented with "for...of" logic? The same can be done with the following logic as well:

for(let i=0;i<tipo.length;i++){
    if(tipo[i] === ' '){
        console.log(i);
    }
}
Related