grgre
grgre

Reputation: 85

Never ending for within for loop

I’m trying to convert text to binary but when my loop runs, it never ends. I cannot figure out why that is so.

Is there a better way to do this?

handleBinaryChange: function(e){
    var friendsCopy = this.state.friendsArray;
    for (var i = 0; i < friendsCopy.length; i++) {
        for (var j = 0; j < friendsCopy[i].friendsName.length; j++) {   
          console.log(friendsCopy[i].friendsName += friendsCopy[i].friendsName[j].charCodeAt(0).toString(2) + " ");
        }//End of 'j' for
      }//End of 'i' for

      this.setState({
          friendsArray: friendsCopy //make friendsCopy contain the new value for friendsName
      });
    }
}

Upvotes: 1

Views: 118

Answers (3)

warkentien2
warkentien2

Reputation: 979

You are increasing friendsName value with +=
in each loop iteration

simple solution: use an auxiliary test parameter that stores the starting value:
this way, test value is fixed throughout the entire loop
e.g.:

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

  var test = friendsCopy[i].friendsName.length; // added this param
  for(var j=0; j<test; j++){   // used it here

    console.log(friendsCopy[i].friendsName += friendsCopy[i].friendsName[j].charCodeAt(0).toString(2) + " ");

  }//End of 'j' for

}//End of 'i' for

Upvotes: 1

Gerald Schneider
Gerald Schneider

Reputation: 17797

By using += in friendsCopy[i].friendsName += you are modifying friendsCopy[i].friendsName. On each iteration it gets longer, so it never stops.

If you only want to output it to the console change it to

friendsCopy[i].friendsName + friendsCopy[i].friendsName[j].charCodeAt(0).toString(2) + " ");

Upvotes: 1

TimoStaudinger
TimoStaudinger

Reputation: 42460

You are using the length of friendsName in your break condition, but you keep increasing the length of the string inside the loop:

for(var j=0; j<friendsCopy[i].friendsName.length; j++){   
    console.log(friendsCopy[i].friendsName += friendsCopy[i].friendsName[j].charCodeAt(0).toString(2) + " ");
}

Note that friendsCopy[i].friendsName.length will be executed for each iteration of the loop, not only once at the beginning.

Upvotes: 0

Related Questions