Can someone explain to me how this second for loop works?

/*jshint multistr:true */
var text = “Bla bla bla test bla bla bla
bla bla bla bla test bla test”

var myName = “test”
var hits = ;

for (var i = 0; i < text.length; i++) {
if (text[i] === “t”) for(var j = i; j < (myName.length + i); j++) {
hits.push(text[j]); }
{
};
};

if (hits.length > 0) {
console.log(hits)
} else {
console.log(“Your name wasn’t found!”)
}

I don’t understand the second for loop. First, why would j ever be > than text.length + i. Second, why is push(text[j]) and not just [j]. I just don’t understand the whole second for loop in general :confused:

let’s do a simple text variable:

var text = "test bla"

agree with me that we can index a string:

t   e   s   t   _   b   l   a
0   1   2   3   4   5   6   7

i put in a underscore for the space. Now, we wrote a first for loop:

for (var i = 0; i < text.length; i++) { }

to loop over the characters, if you where to add a console.log statement:

var text = "test bla"
for (var i = 0; i < text.length; i++) { console.log(i) }

we would see the numbers 0 till 7 (7 included), now we could use these numbers to access the letters indexed at these positions in our text string:

var text = "test bla"
for (var i = 0; i < text.length; i++) { console.log(text[i]) }

Now, you use an if statement:

if (text[i] === "t") 

to see if there is a hit, agree that on our new text variable (var text = "test bla") i is 0 the moment a hit in encountered? So now the second for loop will run. We use j in our second for loop to push our hits. j will be set to 0 (since i is 0), then will run as long as it is smaller then i (0) + myName.length (4), so that will be: 0,1,2,3.

What a lucky day, that are the indexes our name is at :smiley: which then will be pushed into an array, so we can print them in the next exercise. Hope this helps

4 Likes

Thanks for that explanation!

I’m still not understanding the “run as long as it is smaller than i (0) + myName.length (4)”

Well, we use i to loop over the string we stored in text, that make sense right? So the moment a hit is encountered, i holds the index of the first letter of the hit/your name, still make sense?

So, now we want to from this index (in our example 0) till the end of your name (which is at 3)?:

t   e   s   t
0   1   2   3
```
So we can push it into an array, so we can print it later. What is the best way to achieve this? By using the length of your myName variable. The second for loop will run, till the last letter (`t`) is pushed into your hits array
1 Like

Alright, I understand now. Thanks!